【问题标题】:Print one column of data frame with row names打印一列带有行名的数据框
【发布时间】:2013-03-30 10:24:47
【问题描述】:

考虑具有自定义行名的数据框:

> data <- data.frame(a=1:3,b=2:4,c=3:5,row.names=c("x","y","z"))
> data
  a b c
x 1 2 3
y 2 3 4
z 3 4 5

如果我选择多于一列,R 会将它们与行名一起打印出来:

> data[,c("a","c")]
  a c
x 1 3
y 2 4
z 3 5

但如果我选择只有一列,R 会将其打印为一个简单的向量,不带行名:

> data[,"c"]
[1] 3 4 5

我的问题是,我如何告诉 R 以与打印多列相同的方式打印 一列,即 带有行名

【问题讨论】:

  • @user1981275 的答案有效,因为当您使用 [, "c"] 进行子集化时,R 会尝试简化对象类。告诉他不要“丢弃”它,保留你的 data.frame 类。

标签: r dataframe


【解决方案1】:

与 data.frames 相比,从 R 中的矩阵获取列似乎保留了它们的(行)名称。我在 R 中发现的(很多!)奇怪的不一致之一......要获得命名向量,其中一个似乎有效:

as.matrix(data['c'])[,1]

array(data['c'], dimnames=list(rownames(data)))

【讨论】:

    【解决方案2】:

    更简单的方法是data['c'],这将产生相同的输出:

      c
    x 3
    y 4
    z 5
    

    【讨论】:

      【解决方案3】:

      您可以使用drop 参数(另请参阅?'['):

      data[,"c", drop=FALSE]
      

      给你一个data.frame

        c
      x 3
      y 4
      z 5
      

      【讨论】:

      • 这类似于subset(data,select="c"),它会生成一个单列数据框。你知道如何得到一个命名的字符向量吗? (抄送@RomanCheplyaka)
      • 我只能想到apply(data[,"c", drop=FALSE], 1, c),但也许有更简单的解决方案。
      • 或者如果你真的想要一个命名的字符向量apply(data[,"c", drop=FALSE], 1, as.character, c)
      • 我知道是很久以前的事了,但是在@user1981275 的帖子上:对我来说apply(data[,"c", drop=FALSE], 1, as.numeric) 效果更好,首先我在最后遇到了c 的问题,对于这个数据示例 as.numeric 似乎变得更好
      猜你喜欢
      • 2019-12-05
      • 1970-01-01
      • 1970-01-01
      • 2013-10-26
      • 2022-01-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多