根据另一个 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 存储为 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
取决于您希望如何处理零案例
要根据 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
下面是我要完成的假设示例:
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 存储为 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
取决于您希望如何处理零案例
要根据 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