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

时间:2017-02-01 20:09:44

标签: r apply

以下是我试图完成的一个假设示例:

   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。在这种情况下,我可能需要使用嵌套的应用程序,但我不太确定如何编写通用的可重现示例。

2 个答案:

答案 0 :(得分:4)

如果您的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

取决于您想要处理零案例的方式

答案 1 :(得分:0)

根据df1&lt; 1来增加或减少1。 df2,你可以用

AbstractObservableWithUpstream

下面

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

返回

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

并且相反的比较返回

      a  b
[1,] -1 -1
[2,] -1 -1
相关问题