【发布时间】:2022-01-08 22:44:23
【问题描述】:
给定一个data.table
library(data.table)
DT = data.table(x=rep(c("b","a","c"),each=3), v=c(1,1,1,2,2,1,1,2,2), y=c(1,3,6), a=1:9, b=9:1)
DT
x v y a b
1: b 1 1 1 9
2: b 1 3 2 8
3: b 1 6 3 7
4: a 2 1 4 6
5: a 2 3 5 5
6: a 1 6 6 4
7: c 1 1 7 3
8: c 2 3 8 2
9: c 2 6 9 1
如果有的话
DT[, .(a, .SD), .SDcols=x:y]
a .SD.x .SD.v .SD.y
1: 1 b 1 1
2: 2 b 1 3
3: 3 b 1 6
4: 4 a 2 1
5: 5 a 2 3
6: 6 a 1 6
7: 7 c 1 1
8: 8 c 2 3
9: 9 c 2 6
来自.SDcols 的变量以.SD 为前缀。另一方面,如果有人尝试,如https://stackoverflow.com/a/62282856/997979,
DT[, c(.(a), .SD), .SDcols=x:y]
V1 x v y
1: 1 b 1 1
2: 2 b 1 3
3: 3 b 1 6
4: 4 a 2 1
5: 5 a 2 3
6: 6 a 1 6
7: 7 c 1 1
8: 8 c 2 3
9: 9 c 2 6
其他变量名 (a) 丢失。 (正是由于这个原因,我重新提出了我最初标记为与上述链接重复的问题。
有什么方法可以同时保留.SD 变量和非.SD 变量的名称吗?
目标是同时能够使用.() 选择不带引号的变量,并能够通过.SDcols = patterns("...") 选择变量
提前致谢!
【问题讨论】:
-
您可以为“a”使用命名列表:
DT[, c(.(a = a), .SD), .SDcols=x:y](如您链接到的帖子中),或使用mget:DT[, c(mget("a"), .SD), .SDcols=x:y](如在相关帖子中:When exactly does data.table preserve column names?) 相关问题:Document when exactly the column names fromjare preserved; “现在,只使用一个命名列表...对于显式命名的可读性还有一些话要说...”
标签: r data.table