假设我有以下数据框:

key         values
A           118
B           118
B           118
C           100
A            90
A            90
A            90

我想将具有上一行相同键的值替换为0。
然后,数据将如下所示:
key         values
A           118
B           118
B             0
C           100
A            90
A             0
A             0

对于称为“m”的数据帧,我用于和如果:
for (i in 1:(length(m[,1])-1)) {

   if (m[,1][i+1]==m[,1][i]) {m[,2][i+1]<- 0}

 }

它可以工作,但是我的数据有2104776行和23列。因此,花费了3个小时。

我想知道是否有更有效的方法来完成此任务。任何想法,将不胜感激。谢谢你。

最佳答案

我们可以使用lag中的dplyr并检查key中的值是否与之前的值相同,并将0分配给匹配的人。

library(dplyr)
df$values[df$key == lag(df$key)] <- 0

df
#  key  value
#1   A  118
#2   B  118
#3   B    0
#4   C  100
#5   A   90
#6   A    0
#7   A    0

关于根据前几行的值替换数据框的值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42096898/

10-12 14:00