在尝试回答this question on Stack Overflow时,我遇到了自己独立的问题,我无法自行解决。但是,我真的很想为我的问题找到一个有效的解决方案。我最初发布这个作为该问题的答案,但由于它引起了混淆,我认为分开发布这个问题是一个更好的决定:
假设我有以下数据:
set.seed(1)
dat <- data.table(value = seq(1,7),value2 = seq(1,7))
shift_id = c(1,2,3,NA,4,NA,5)
我想使用shift_id将行换成两列新列,因此所需的输出是:
value value2 value1.shift value2.shift
1: 1 1 1 1
2: 2 2 2 2
3: 3 3 3 3
4: 4 4 NA NA
5: 5 5 4 4
6: 6 6 NA NA
7: 7 7 5 5
请注意,第7行的内容为第5行,因为shift_id [7] = 5 我如何有效地使用DT包?
非常感谢任何帮助!
答案 0 :(得分:2)
你可以尝试:
The system cannot find the path specified.
使用数据表特定功能的另一种更通用的方法(感谢@David Arenburg的建议)将是:
dat[, c("value1.shift", "value2.shift") := list(dat$value[shift_id], dat$value2[shift_id])]
> dat
value value2 value1.shift value2.shift
1: 1 1 1 1
2: 2 2 2 2
3: 3 3 3 3
4: 4 4 NA NA
5: 5 5 4 4
6: 6 6 NA NA
7: 7 7 5 5