将行的每个值与向量中的对应值进行比较

时间:2017-06-10 08:39:49

标签: r matrix dataframe comparison

我想将data.frame中一行的每个值与向量中的相应值进行比较。这是一个例子:

df1 <- matrix(c(2,2,4,8,6,9,9,6,4), ncol = 3)
df2 <- c(5,4,6)

> df1
     [,1] [,2] [,3]
[1,]    2    8    9
[2,]    2    6    6
[3,]    4    9    4

> df2
[1] 5 4 6

比较将是,如果df1的行中的值小于其在df2中的对应值,则row1:2&lt; 5,8&lt; 5,9&lt; 5;第2行:2&lt; 4,6&lt; 4,6&lt; 4;第3行:4&lt; 6,9&lt; 6,4&lt; 6

> result
     [,1]  [,2]  [,3]
[1,] TRUE FALSE FALSE
[2,] TRUE FALSE FALSE
[3,] TRUE FALSE  TRUE

有没有办法在不使用循环的情况下执行此操作?

谢谢小伙子们!

1 个答案:

答案 0 :(得分:0)

我们可以进行比较以创建逻辑矩阵

df1 < df2
#   [,1]  [,2]  [,3]
#[1,] TRUE FALSE FALSE
#[2,] TRUE FALSE FALSE
#[3,] TRUE FALSE  TRUE

它起作用的原因是基于vector的回收。因此,矢量'df2'的每个元素与第一列'df1'进行比较,然后转到第二列,依此类推。

如果向量的length不等于第一个数据集的列数,我们可以复制向量

df1 < df2[row(df1)]
#    [,1]  [,2]  [,3]
#[1,] TRUE FALSE FALSE
#[2,] TRUE FALSE FALSE
#[3,] TRUE FALSE  TRUE

或另一个选项是sweep

sweep(df1, 1, df2, "<")