我想将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
有没有办法在不使用循环的情况下执行此操作?
谢谢小伙子们!
答案 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, "<")