我有一个如下所示的数据框:
> mydf
val1 val2
hsa-let-7a 2.139890 -0.03477569
hsa-let-7b 2.102590 0.04108795
hsa-let-7c 2.061705 0.02375882
hsa-let-7d 1.938950 -0.04364545
hsa-let-7e 1.889000 -0.10575235
hsa-let-7f 2.264296 0.08465690
请注意,从3列开始,只有第2和第3列是名称。 我想要做的是命名第一列(加上重命名第二和第三列)。
但为什么这个命令失败了?
colnames(mydf) <- c("COL1","VAL1","VAL2");
这样做的正确方法是什么?
它给了我:
Error in `colnames<-`(`*tmp*`, value = c("COL1", "VAL1", "VAL2" :
'names' attribute [3] must be the same length as the vector [2]
答案 0 :(得分:15)
您可以将行名称加入数据框,如下所示:
mydf <- cbind(rownames(mydf), mydf)
rownames(mydf) <- NULL
colnames(mydf) <- c("COL1","VAL1","VAL2")
或者,一步到位:
setNames(cbind(rownames(mydf), mydf, row.names = NULL),
c("COL1", "VAL1", "VAL2"))
# COL1 VAL1 VAL2
# 1 hsa-let-7a 2.139890 -0.03477569
# 2 hsa-let-7b 2.102590 0.04108795
# 3 hsa-let-7c 2.061705 0.02375882
# 4 hsa-let-7d 1.938950 -0.04364545
# 5 hsa-let-7e 1.889000 -0.10575235
# 6 hsa-let-7f 2.264296 0.08465690
答案 1 :(得分:1)
这也可能适用于您的情况
mydf <- cbind(rownames(mydf),mydf)
rownames(mydf) <- NULL
colnames(mydf) <- c(names(mydf)) #to not write all the column names
colnames(mydf)[1] <- "name.of.the.first.column"
names(mydf)
答案 2 :(得分:0)
如果要在他/她的管道中使用tidyverse
解决方案,则可以使用
rownames_to_column(mydf, var = "var_name")
该功能包含在tibble
包中