R-将矢量与数据帧进行比较

  • 本文关键字:比较 数据帧 r compare
  • 更新时间 :
  • 英文 :


我有一个看起来像 -

的数据框架
test   A   B   C
  28  67   4  23
  45  82  43  56
  34  8   24  42

我需要将test与其他三列进行比较,因为我只需要另一列中的元素数量,而这些元素的数量小于测试列中的相应元素。

因此所需的输出为 -

test   A   B   C result
  28  67   4  23      2
  45  82  43  56      1
  34  8   24  42      2

我尝试 -

comp_vec = "test"
name_vec = c("A", "B", "C")
rowSums(df[, comp_vec] > df[, name_vec])

我有错误 -

Error in Ops.data.frame(df[, comp_vec], df[, name_vec]) : 
‘>’ only defined for equally-sized data frames

我正在寻找一种方法,而不复制test匹配DataFrame的大小。

您可以使用sapply返回与其他三列映射df$test列的向量。那将返回可以执行rowSums的T/F矩阵,并将其设置为result列。

df <- data.frame(test = c(28, 45, 34), A = c(67, 82, 8), B = c(4, 43, 24), C = c(23, 56, 42))
df$result <- rowSums(sapply(df[,2:4], function(x) df$test > x))
> df
  test  A  B  C result
1   28 67  4 23      2
2   45 82 43 56      1
3   34  8 24 42      2

我注意到您的预期结果为A的第二行82,而在您的起始示例中的5个。

df$result <- apply(df, 1, function(x) sum(x < x[1]))

使用apply,指定1以按行指示。如果行中每个位置的值小于第一列的值,则x < x[1]将给出真/错误的向量。使用sum给出TRUE值的数量。

#   test  A  B  C result
# 1   28 67  4 23      2
# 2   45 82 43 56      1
# 3   34  8 24 42      2

相关内容

  • 没有找到相关文章

最新更新