根据另一个 data.frame 更改 data.frame 中的值

Changing values in a data.frame based upon another data.frame

下面是我要完成的假设示例:

   a  b         A  B
1  3  5      1  2  4
2  7  9      2  6  8

我有两个 data.frames 大小相同。基于第一个 data.frame 中的每个值,我想更新第二帧中的相应值。如果我在假设条件下使用 C 风格的 for 循环来编写它,它将如下所示:

for (i = 0; i < numRol; i++) {
    for (j = 0; j < numCol; j++) {
        if (frame1[i][j] < frame2[i][j])
            frame2[i][j] += 1
        else
            frame2[i][j] -= 1
    }
}

所以在这个例子中,第二个 data.frame 将被转换为:

   A  B
1  1  3
2  5  7

在 R 的这种情况下,我认为我不需要使用 for 循环,而是可以使用 apply 系列的一些变体。

对于我的具体情况,如果我在 frame1 中找到一个 0,我想在 frame2 中的相同位置放置一个 1。在这种情况下,我可能需要使用嵌套应用,但我不太确定如何编写通用的可重现示例。

如果您的 data.frames 存储为 df1df2,例如:

 df1 = data.frame(a=c(3,7), b=c(5,9))
 df2 = data.frame(a=c(2,6), b=c(4,8))

然后你就可以比较整个结构了。所以你所要求的可以通过类似的东西来完成:

df2[df1 == 0] <- 1
df2[df1 < df2] = df2[df1 < df2] + 1
df2[df1 > df2] = df2[df1 > df2] - 1

取决于您希望如何处理零案例

要根据 df1 < df2 加或减 1,您可以使用

df2 + ((2 * (df1 < df2)) - 1)
  A B
1 1 3
2 5 7

这里

((2 * (df1 < df2)) - 1)

returns

      a  b
[1,] -1 -1
[2,] -1 -1

和相反的比较returns

((2 * (df1 > df2)) - 1)
     a b
[1,] 1 1
[2,] 1 1