我有一个包含许多列(50 多个)的宽 data.table
一个简化的例子(有 5 列):
dt <- data.table(A = 1:10, B = 1, C = 1, D = 1, E = 1, F = 1, G = 1)
现在我想子集列 B 和列 D 直到 F。
如果我只想要 D 到 F,我可以这样做:
dt[, D:F]
但是,我想保留 B 列。从长远来看,我可以达到我想要的结果,但这是我要避免的:
dt[, c("B", "D", "E", "F")]
我的问题是是否可以使用如下语法,这显然行不通:
dt[, c("B", D:F)]
请记住,这是一个简化的示例,“不选择 A、C、G”并不能真正解决我的问题。
我一直在想这个问题。我意识到我总是可以长期解决它,但我想知道是否有快速的方法,因为我经常遇到这个问题。
非常感谢任何回复!
最佳答案
在 base 中,您可以使用 subset
来选择列 B 和 D:F。
subset(x, select = c(B, D:F))
# B D E F
#1 1 1 1 1
#2 1 1 1 1
#3 1 1 1 1
#4 1 1 1 1
#5 1 1 1 1
#6 1 1 1 1
#7 1 1 1 1
#8 1 1 1 1
#9 1 1 1 1
#10 1 1 1 1
这也适用于 data.table
,其中 cbind
也可以像这样使用:
cbind(dt[,"B"], dt[, D:F])
或者你可以使用匹配
:
i <- match(c("B", "D", "F"), colnames(x))
x[,c(i[1],i[2]:i[3])]
数据:
x <- data.frame(A = 1:10, B = 1, C = 1, D = 1, E = 1, F = 1, G = 1)
library(data.table)
dt <- data.table(x)
关于r - 使用 ":"(示例 : subset column B and column D until F))根据列名对数据帧进行子集化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60174000/