2017-10-13 67 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