以下是我试图完成的一个假设示例:
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。在这种情况下,我可能需要使用嵌套的应用程序,但我不太确定如何编写通用的可重现示例。
答案 0 :(得分:4)
如果您的data.frames存储为df1
和df2
,例如:
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