2016-09-14 111 views
0

是否可以使用列名稱數組中存儲的列名稱將數據框列(到新的df)進行子集分類 - 例如c(「col1」,「col9」 「COL6」)?我知道我可以使用DF [colname的]語法DF引用一列,但它不會讓我做了多列:在.subset2R - 使用向量列表中的名稱的子集數據幀列

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]] 

錯誤(X,I,準確=準確):下標越界

感謝

+0

謝謝 - 第一個工作,但需要將數據幀轉換爲表...第二個沒有工作,當我嘗試:> cnm <-c(「X2」,「X3」) > df [cnm] 錯誤在[[.data.table](df,cnm): 當我是data.table(或字符向量),必須鍵入x(即排序,並標記爲排序),以便data.table知道要加入哪些列並利用x進行排序。先撥打setkey(x,...),看到?setkey。 –

+0

第二個不會工作,因爲你的數據集是'data.table' – akrun

回答

3

基於業務方案的數據集,這似乎是一個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文檔

與 - 默認情況下與= 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 

將子集中的數據集

[[是用於提取data.framelist元件


的單個列運用OP的代碼在data.table ge TS在.subset2相同的錯誤消息

df[[cnm]] 

錯誤(X,I,確切=確切):下標越界

如果我們做data.frame subsetting選項中data.table,它不會工作要麼

df[cnm] 

錯誤[.data.table(DF,CNM):當i爲data.table(或 字符向量),必須使用'on ='參數(請參閱?data.table)或鍵入x(即,數據表格)指定要連接的列或者 。排序, 和,標記爲排序,請參閱?setkey)。由於x在RAM中排序,鍵控連接可能會對非常大的數據帶來進一步的速度收益。

+0

謝謝 - 我錯過了setDF(df)... –

相關問題