r - 使用 ":"(示例 : subset column B and column D until F))根据列名对数据帧进行子集化

标签 r dataframe data.table subset

我有一个包含许多列(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/

相关文章:

r - 从 R 中的切割树状图中提取标签成员/分类(即 : a cutree function for dendrogram)

r - 为 R 中的同一变量绘制两个不同的 x Axis

python - Dask 数据帧 : reading multiple files & storing filename in column

python - 复制 pandas 列,根据之前的列给出值

r - 数据表 : column name not working with j = c() and by

r - 积分函数中多个参数对应的多个数组的所有可能组合

r - 在避免循环的同时计算 "smaller"行数比其他行数

R,strptime(),%b,尝试将字符转换为日期格式

python - 在 Python Pandas 中,如何获取一列,然后跳过几列,然后获取连续的列

r - 基于节点权重构建图的优化算法