【问题标题】:Drop columns by name data frame vs matrix按名称数据框与矩阵删除列
【发布时间】:2017-10-13 15:42:38
【问题描述】:

我想按名称删除矩阵中的列,我注意到它与数据框的工作方式不同:

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

为什么以及如何解决这个问题?

【问题讨论】:

  • 当你有一个矩阵时使用colnames而不是names
  • 为什么会有这种差异?
  • 因为矩阵和数据框不同。列在矩阵中并不像在数据框中那样特殊。 colnames 对两者都有效。
  • data.frame 本质上是list,在 R 中具有矩阵的属性。你不能期望矩阵的每个方法都与data.frame 相同。

标签: r dataframe matrix


【解决方案1】:

对于矩阵,您可以使用colnamesrownames(或者,如果您需要推广到具有更多维度的数组,请使用dimnames 列表)。

names 没有为矩阵定义。它是为list 定义的,因此也为data.frame 定义,其中列通常更重要(至少在某种意义上),因此names 指的是一个安全约定到列名。但是在数组中,没有理由偏爱一个维度而不是另一个维度。

类似的问题是Extract matrix column values by matrix column name

【讨论】:

    猜你喜欢
    • 2011-06-04
    • 1970-01-01
    • 2011-07-11
    • 2015-03-27
    相关资源
    最近更新 更多