【发布时间】:2017-10-05 15:59:49
【问题描述】:
考虑一个测试数据集
test = data.table("a"=c(NA,NA, 0, NA, NA), "b"=c(1,3,4,7,8), "c"=c(NA, 2,1,3,1), "group"=c(1,1,1,1,1))
a b c group
1: NA 1 NA 1
2: NA 3 2 1
3: 0 4 1 1
4: NA 7 3 1
5: 0 8 1 1
6: NA 9 1 1
我想更新一列的值,这样:
t = a_{i-1}+c_i
if(is.na(a_i)) {
a_i = t
}
这应该会产生以下数据集:
a b c group
1: NA 1 NA 1
2: NA 3 2 1
3: 0 4 1 1
4: 3 7 3 1
5: 0 8 1 1
6: 1 9 1 1
我将示例缩减为一组,但可以有多个。我宁愿避免使用 for 循环解决方案,因为我的实际数据集有数百万行。
【问题讨论】:
-
这是因为
NA加上任何东西仍然是NA。第 4 行计算0 + 3 = 3,第 5 行计算第 4 行中的NA(尚未被替换)加上 1,并生成NA。如果您想按顺序更新,则不能使用:=或*apply结构,您必须使用for循环或类似结构。 -
为什么
a在第 3 行仍然等于 0?为什么不是所有NA?
标签: r dplyr data.table