是否可以使用存储在列名称数组中的列名来对数据框列(到新的df)进行子集化 - 例如c(" col1"," col9",& #34; COL6&#34)?我知道我可以使用df [[colname]]语法在df中引用一列,但它不允许我为多列执行此操作:
df
X1 X2 X3
1: a 1 3
2: b 5 3
3: a 3 4
4: c 6 5
5: c 2 2
cnm<-c("X2","X3")
df[[cnm]]
.subset2(x,i,exact = exact)中的错误:下标越界
感谢
答案 0 :(得分:3)
基于OP的数据集,它看起来像data.table。对于data.table中的列的子集,我们需要with = FALSE
df[, cnm, with = FALSE]
# X2 X3
#1: 1 3
#2: 5 3
#3: 3 4
#4: 6 5
#5: 2 2
根据?data.table
文档
with - 默认情况下为= TRUE,j在x的帧内进行计算; 列名可以用作变量。
当= = FALSE时,j是列名的字符向量,数字 列位置向量选择或形式startcol:endcol, 并且返回的值始终是data.table。通常为= FALSE 在data.table中有用,可以动态选择列。注意x [, cols,with = FALSE]相当于x [,。SD,.SDcols = cols]。
如果数据集为data.frame
,则为
setDF(df)#convert to 'data.frame'
df[cnm]
# X2 X3
#1 1 3
#2 5 3
#3 3 4
#4 6 5
#5 2 2
将对数据集进行子集化
[[
用于提取data.frame
或list
元素的单列
在data.table
中应用OP代码会收到相同的错误消息
df[[cnm]]
.subset2(x,i,exact = exact)中的错误:下标越界
如果我们在data.table
中执行data.frame子集化选项,它将无法正常工作
df[cnm]
[.data.table
(df,cnm)中的错误:当我是data.table(或 字符向量),必须指定要连接的列 使用&#39; on =&#39;参数(参见?data.table)或通过键入x(即排序, 并标记为已排序,请参阅?setkey)。键控连接可能会更进一步 由于x在RAM中排序,因此速度对非常大的数据有益。