我确实尝试了很多方法来解决以下问题,并且我已经阅读了很多相关内容。但我还是没能做到
请参阅此示例:
time <- sample(1:300, 20)
test <- c (0,0,0, NA, 0, 0, 3, 0, 0, NA, 0,0, 3, 0, 0, NA, 0, 0, 3, 0)
take <- rep(NA, 20)
df <-data.frame(time, test, take)
> head(df, 8)
time test take
1 271 0 NA
2 147 0 NA
3 277 0 NA
4 247 NA NA
5 82 0 NA
6 133 0 NA
7 231 3 NA
8 110 0 NA
现在我想在最后(取)列中输入值。那里的值取决于第二列(测试)中的条件。如果是 NA 或 3,则可以保留为空。到目前为止还好, 但我的问题是值 0。如果前一行的值为 0,则应在该行中放入“a”,如果前一行的值为 3,则应放入“b”,其余则应放入“c”。
因此输出应如下所示:
head(df, 8)
time test take
1 271 0 c
2 147 0 a
3 277 0 a
4 247 NA NA
5 82 0 c
6 133 0 a
7 231 3 NA
8 110 0 b
感谢您的帮助!
最佳答案
尝试:
is0<-which(df$test==0) # indices of test elements = 0
df[is0,"take"]<-"c" # for each test=0, put take="c", as it is the "default" value
for (i in setdiff(is0,1)){ # for each test=0 that is not the first one (because the first row doesn't have a previous row)
if((i-1) %in% is0) df$take[i]<-"a" else if(df$test[i-1]==3 & !is.na(df$test[i-1])) df$take[i]<-"b" # if in the previous row test=0 then take="a", if it is 3 (and not NA), take="b"
}
关于r - Dataframe:列,检查每行前一行的值并输入值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26590681/