如何根据R的data.table中另一列中的内容选择列?

YYY*_*YYY 1 r data.table

我有一个像这样的data.table:

> dt<-data.table(F=rep(c('a','b','c'),each=2), fix=c(10:15),a=c(1:6), b=c(2:7),c=c(3:8))
> dt
   F fix a b c
1: a  10 1 2 3
2: a  11 2 3 4
3: b  12 3 4 5
4: b  13 4 5 6
5: c  14 5 6 7
6: c  15 6 7 8
Run Code Online (Sandbox Code Playgroud)

列F存储要为每行提取的列.因此,对于前2个记录列,将提取列'a',而将为3和4记录提取列'b'.每个记录都会保留"修复".理想的输出应该是这样的:

   F  fix new
1: a  10   1 
2: a  11   2
3: b  12   4
4: b  13   5
5: c  14   7
6: c  15   8
Run Code Online (Sandbox Code Playgroud)

sha*_*dow 5

你可以用.SDwith = FALSE

dt[, .(fix = fix, new = unlist(.SD[, F, with=FALSE])), by = F]
##    F fix new
## 1: a  10   1
## 2: a  11   2
## 3: b  12   4
## 4: b  13   5
## 5: c  14   7
## 6: c  15   8
Run Code Online (Sandbox Code Playgroud)

  • 我不知道它更好,但是`new = get(.BY [[1]] [1])`也有效.或者只是`new = get(F [1])` (3认同)
  • @Frank,也是`dt [,.(fix,new = get(F)),by ="F"]` (2认同)