2012-11-14 45 views

回答

159

對於data.table>= 1.9.8版本,下面的一切都只是工作:

library(data.table) 
dt <- data.table(a = 1, b = 2, c = 3) 

# select single column by index 
dt[, 2] 
# b 
# 1: 2 

# select multiple columns by index 
dt[, 2:3] 
# b c 
# 1: 2 3 

# select single column by name 
dt[, "a"] 
# a 
# 1: 1 

# select multiple columns by name 
dt[, c("a", "b")] 
# a b 
# 1: 1 2 

對於版本data.table< 1.9.8(需要數字列選擇使用with = FALSE),請參閱this previous version這個答案。另請參閱NEWS,v1.9.8中的變化/潛在的變化變化/點2.

+0

沒問題。比較'dt [,'a「]'和'dt [,」a「,with = FALSE]'來看看它真的是一個有用的選項。 –

+2

有沒有辦法做到這一點?例如'DT [,list(b:c)',因爲我發現在數據表中直接轉換列是很方便的,例如我可以做'DT [,list(1/b,2 * c)]'但這不適用於。 – jamborta

+0

您可以使用.SDcols = 2:3或名稱的字符向量。不確定你的意思是關於如何不與 – mnel

31

這有點冗長,但我已經習慣了使用隱藏的.SD變量。

b<-data.table(a=1,b=2,c=3,d=4) 
b[,.SD,.SDcols=c(1:2)] 

這是一個有點麻煩,但你不要失去了其他data.table功能(我不認爲),所以你仍然應該能夠使用像連接表等其他重要功能。

+5

以編程方式創建列列表時不麻煩並且非常有用 – Chris

33

如果你想使用列選擇列,只需使用.(),這是list()別名:

library(data.table) 
dt <- data.table(a = 1:2, b = 2:3, c = 3:4) 
dt[ , .(b, c)] # select the columns b and c 
# Result: 
# b c 
# 1: 2 3 
# 2: 3 4 
1

@湯姆,非常感謝您指出這個解決方案。 它對我很好。

我正在尋找一種方法,只是從打印和上面的示例中排除一​​列。要排除第二列,你可以做這樣的事情

library(data.table) 
dt <- data.table(a=1:2, b=2:3, c=3:4) 
dt[,.SD,.SDcols=-2] 
dt[,.SD,.SDcols=c(1,3)] 
0

你也可以考慮dplyr包。它允許使用更簡單的結構來處理數據幀。一個例子將是使用選擇指令I可以按名稱僅搶在數據幀中,我想

選擇(。數據,VAR1,var7,var12)變量

Verbs used in dplyr

+0

問題出在數據表而不是數據框上。 – jamborta

+1

dplyr軟件包也適用於數據表格(我必須查看這些數據,因此在發佈之前我不對此表示歉意)。 – Puddlebunk

4

從V1。 10.2以後,你也可以用..

dt <- data.table(a=1:2, b=2:3, c=3:4) 

keep_cols = c("a", "c") 

dt[, ..keep_cols] 
相關問題