2017-10-13 63 views
1

我想的名字在一個矩陣來刪除列,我注意到,這是行不通的相同數據幀:刪除列的名稱數據幀VS矩陣

df <- as.matrix(data.frame(x=1:5, y=2:6, z=3:7, u=4:8)) 

df[ , -which(names(df) %in% c("z","u"))] 


df <- data.frame(x=1:5, y=2:6, z=3:7, u=4:8) 

df[ , -which(names(df) %in% c("z","u"))] 

爲什麼,我怎麼能解決這個問題?

+4

當你有矩陣時使用'colnames'而不是'names' – Gregor

+0

爲什麼這個區別? – Al14

+2

因爲矩陣和數據幀是不同的。列在矩陣中不像數據幀中那樣特殊。 'colnames'將適用於兩者。 – Gregor

回答

1

使用矩陣,您可以使用colnamesrownames(或者,如果您需要推廣到更多維度的陣列,則可以使用dimnames列表)。

names沒有爲矩陣定義。它定義爲list,因此對於data.frame定義,其中列通常是更重要的(從某種意義上講,至少),所以names引用列名是安全約定。但是在數組中,沒有理由選擇一個維度到另一個維度。

類似的問題是Extract matrix column values by matrix column name