是否可以使用存储在列名数组中的列名对数据框列进行子集化(到新的 df 中) - 就像 c("col1", "col9", "col6") 中那样?我知道我可以使用 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]]
Run Code Online (Sandbox Code Playgroud)
.subset2(x,i,exact =exact)中的错误:下标超出范围
谢谢
基于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
Run Code Online (Sandbox Code Playgroud)
根据?data.table文档
with - 默认情况下 with=TRUE 并且 j 在 x 的框架内求值;列名可以用作变量。
当 with=FALSE j 是列名称的字符向量、要选择的列位置的数值向量或 startcol:endcol 形式时,返回的值始终是 data.table。with=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
Run Code Online (Sandbox Code Playgroud)
将对数据集进行子集化
用于提取或元素[[的单列data.framelist
在 a 中应用 OP 代码data.table会得到相同的错误消息
df[[cnm]]
Run Code Online (Sandbox Code Playgroud)
.subset2(x,i,exact =exact)中的错误:下标超出范围
如果我们在 中执行 data.frame 子集化选项data.table,它也将不起作用
df[cnm]
Run Code Online (Sandbox Code Playgroud)
(df, cnm)中的错误
[.data.table:当 i 是 data.table (或字符向量)时,必须使用 'on=' 参数(参见 ?data.table)或通过键控 x (即排序,并且标记为已排序,请参阅 ?setkey)。由于 x 在 RAM 中排序,键控连接对于非常大的数据可能具有进一步的速度优势。
| 归档时间: |
|
| 查看次数: |
17171 次 |
| 最近记录: |