数据框的列名称

时间:2012-06-13 18:06:52

标签: r dataframe

你好我在R中有一个数据框,它是将一个向量与大数据库进行比较的结果(数据库的读取方式如下db <- read.table("database.txt", header = F, row.names = 1, sep = ","))。

问题是当我尝试使用这段代码命名列时colnames(some_matrix_with_example_below) <- c("name1","name2") R产生了错误:

Error in `colnames<-`(`*tmp*`, value = c("name1", "name2")) : 
  length of 'dimnames' [2] not equal to array extent

要重命名的矩阵示例

row.names   item
dbi1    1.0000000
dbi3    0.9431307
dbi4    0.9427034
dbi5    0.9259156
dbi6    0.9210256

正如我正确理解row.names不像列一样,有没有简单的方法来创建名称和值对象并将它们绑定以进一步导出?

1 个答案:

答案 0 :(得分:2)

使用

df <- read.table(text="row.names   item
dbi1    1.0000000
dbi3    0.9431307
dbi4    0.9427034
dbi5    0.9259156
dbi6    0.9210256", header=TRUE)

请注意df这里有两列。

> df
  row.names      item
1      dbi1 1.0000000
2      dbi3 0.9431307
3      dbi4 0.9427034
4      dbi5 0.9259156
5      dbi6 0.9210256

现在重命名这些名称:

names(df) <- paste0("name", 1:2)

给出了

> df
  name1     name2
1  dbi1 1.0000000
2  dbi3 0.9431307
3  dbi4 0.9427034
4  dbi5 0.9259156
5  dbi6 0.9210256

现在,当我们写出这个数据框时,我们禁止写行名:

write.table(df, file = "my_data.txt", quote = FALSE, col.names = TRUE,
            row.names = FALSE, sep = ",")

我们得到以下文件:

$ cat my_data.txt 
name1,name2
dbi1,1
dbi3,0.9431307
dbi4,0.9427034
dbi5,0.9259156
dbi6,0.9210256

我会将舍入步骤与将数据写入文件分开。此外,您不需要转换为矩阵以使用write.table()数据框正常工作。

df2 <- transform(df, name2 = round(name2, digits = 4))

给出

> df2
  name1  name2
1  dbi1 1.0000
2  dbi3 0.9431
3  dbi4 0.9427
4  dbi5 0.9259
5  dbi6 0.9210

然后如上所述写出来。如果您愿意,您甚至可以将这两个步骤结合起来:

write.table(transform(df, name2 = round(name2, digits = 4)),
            file = "my_data3.txt", quote = FALSE, col.names = TRUE,
            row.names = FALSE, sep = ",")