【发布时间】:2017-01-05 10:19:06
【问题描述】:
我有一个结构如下的数据框 df:
val1 val2 val3
1 12 NA
2 14 NA
3 54 54
1 35 4
2 3 5
3 7 NA
4 8 NA
5 9 NA
预期值:
val1 val2 val3 val4
1 12 NA 12
2 14 NA 12
3 54 54 54
1 35 4 35
2 3 5 3
3 7 NA 3
4 8 NA 3
5 9 NA 3
问题:
我需要一个具有以下条件的新列 val4
df$val4 <- ifelse(df$val1 == 1, df$val2, ifelse(is.na(df$val3), lag(df$val4), df$val2))
这导致
Error in hasTsp(x) : attempt to set an attribute on NULL
条件:
- val1 等于 1 时,val4 等于 val2 的值(val3 无关紧要)
- val3 为 NA 时,val4 等于前一个值(预计 val1 不等于 1 时)
P.S:我知道我可以在这里使用 for 循环,但这会很慢!
【问题讨论】:
-
您是否更改了预期的输出?现在哪一个是正确的?
-
只需
df$val4 <- zoo::na.locf(ifelse(df$val1 != 1 & is.na(df$val3), NA, df$val2))