按索引

时间:2017-07-17 09:13:23

标签: r data.table

在尝试回答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包?

非常感谢任何帮助!

1 个答案:

答案 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