假设我有以下数据框:
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/