【问题标题】:How to set the row index name in R? (Like DF.index.name in Pandas)如何在 R 中设置行索引名称? (就像 Pandas 中的 DF.index.name 一样)
【发布时间】:2016-08-22 19:46:05
【问题描述】:

如何在R data.frame 对象中设置行索引名称?

我尝试在 stackoverflow 上寻找答案,但我什至不知道如何搜索它? https://stackoverflow.com/search?q=set+row+index+name+dataframe+R

这是一种解释,但他们正在将其转换为矩阵? How do I name the "row names" column in r

> dimnames(DF_c) = c("sample","cluster")
Error in `dimnames<-.data.frame`(`*tmp*`, value = c("sample", "cluster" : 
  invalid 'dimnames' given for data frame

在 Python Pandas 中,我会简单地执行 DF_c.index.name = "samples",但我不知道如何在 R 中执行此操作。我注意到当我保存它write.table(DF_c, "output.tsv", sep="\t") 时,它会将我的列标签作为行名,但我不能做类似colnames(DF_c) = c( "samples","cluster") 的事情,因为只有一列?

# Clusters
DF_c = data.frame(last_iter$c)
rownames(DF_c) = row_labels
colnames(DF_c) = c( "cluster")

奖金: 写表输出时如何不包含"

【问题讨论】:

  • 您不能重命名行名向量。它的名字已经是rownames 并且它被存储为一个属性。您的奖金问题是重复的。做一些搜索。
  • 为什么将列名移到行上?我不知道 R 中的术语。
  • 我想您是在问 Excel 的行为方式。
  • 我不这么认为。在 Pandas 中,当它输出数据框时,标题开头有一个选项卡,因此所有内容都排成一行。我在问如何让 R 不这样做。我以为通过命名行索引,问题就解决了。
  • 是的,还请注意,您可以(而且我通常会)通过指定row.names = FALSE 在写入文件时隐藏行名。通常,当R读取一个分隔文件时,如果有一个标题行的值比其他行少一个,它将假定第一列是行名。

标签: r indexing dataframe row labels


【解决方案1】:

您正确设置了行名和列名,您只是错过了“write.table”命令中删除引号的部分:

write.table(DF_c, "output.tsv", sep="\t", quote = FALSE)

您的列名超过输出表中的行名的原因似乎是 R 的一个怪异之处,您可以通过使用列标签为您的行名创建一个列,然后将表写出来绕过它:

DF_c = data.frame(last_iter$c)
colnames(DF_c) = c( "cluster")
DF_c$rownames = row_labels

write.table(DF_c, "output.tsv", sep="\t", quote = FALSE)

【讨论】:

  • 结合您的回答和@joran 的帮助,我得到了它与# Clusters DF_c = data.frame(last_iter$c) DF_c = cbind(samples = row_labels, DF_c, row.names = NULL) colnames(DF_c) = c("samples", "cluster")的帮助
猜你喜欢
  • 2018-09-05
  • 2016-10-24
  • 2014-02-07
  • 1970-01-01
  • 1970-01-01
  • 2020-02-29
  • 2021-08-02
  • 1970-01-01
相关资源
最近更新 更多