【问题标题】:Compare each value of a row to corresponding value in a vector将行的每个值与向量中的对应值进行比较
【发布时间】:2017-06-10 08:39:49
【问题描述】:

我想将 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

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

有什么方法可以在不使用循环的情况下做到这一点?

谢谢小伙伴们!

【问题讨论】:

    标签: r matrix dataframe comparison


    【解决方案1】:

    我们可以做一个比较来创建逻辑矩阵

    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, "<")
    

    【讨论】:

    • 但是当我比较时,为什么我会收到此错误消息“Ops.data.frame(short_term_g_OJ, as.vector(perpetual_g_OJ)) 中的错误:'
    • @Tobi1990 根据示例,我假设向量的元素数,即“df2”等于行数。我更新了帖子
    • 谢谢!很抱歉,没有提到只有行数相等,但列数不一定与向量中的行数匹配。 df1 nrow(vector) 诱导 NA,但 df1
    • @Tobi1990 你是对的。这是更改为 row rom col 给出相同结果的示例之一。
    • 如果条件为真,您知道我现在如何将 df1 的每个值替换为 df2 的相应值吗?谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多