r - Dataframe:列,检查每行前一行的值并输入值

标签 r loops if-statement dataframe

我确实尝试了很多方法来解决以下问题,并且我已经阅读了很多相关内容。但我还是没能做到

请参阅此示例:

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/

相关文章:

r - 将 react 值传递给函数并访问 react 属性

r - 使用 r 从数据帧的标题中删除空格

R Shinydashboard - 更改 valueBox 的高度

r - 将纬度/经度转换为正确的格式

java - 如果其中一个输入错误,则额外运行一次循环

java - 无法访问的代码 - 不应该无法访问

bash - 获取存储到 ssh 命令内变量的退出状态

c - 为什么我的 'if' 语句被跳过?

python - 我应该如何在 Django 中按类别组织项目列表?

java - java中的多字扫描仪输入?