你好,我在 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 不被视为列,是否有简单的方法不创建名称和值对象并绑定(bind)它们以进一步导出?
最佳答案
使用
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 = ",")
关于r - 数据框的列名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11020765/