保留orignial列名称

时间:2016-07-09 10:49:18

标签: r dataframe

我想知道为什么列名在R中发生变化。我的数据框df看起来像

            2        1         2        2        2         2         2
1 PARK7 10.306062 9.896181  9.735218 9.954633 7.860466 10.258330 10.335949
2  GUK1  8.065012 8.749869  7.446256 7.714932 9.031494  7.472488  8.867279
3  RPS7  8.850187 9.618386  7.877744 9.139807 9.671187  9.627716  9.775775
4   MSN  9.358871 9.906740  9.636625 9.013183 9.229059  9.376560  9.327103
5 CSRP1 10.751795 9.939579 10.611670 9.225930 9.753050 10.634176 10.346735

我尝试通过

将第一列更改为行名
names <- df[,-1]
rownames(names) <- df[,1]

但它改变了列名,输出就像

           2        1       2.1      2.2      2.3       2.4       2.5
 PARK7 10.306062 9.896181  9.735218 9.954633 7.860466 10.258330 10.335949
  GUK1  8.065012 8.749869  7.446256 7.714932 9.031494  7.472488  8.867279
  RPS7  8.850187 9.618386  7.877744 9.139807 9.671187  9.627716  9.775775
   MSN  9.358871 9.906740  9.636625 9.013183 9.229059  9.376560  9.327103
 CSRP1 10.751795 9.939579 10.611670 9.225930 9.753050 10.634176 10.346735

为什么列名称会更改,以及如何保留原始列名称。

1 个答案:

答案 0 :(得分:0)

默认情况下,data.frame中的重复列名称不是首选,因为它可能会导致在按名称调用列时出现混淆。它使用make.unique将列名更改为唯一。为了说明这一点

v1 <- make.unique(as.character(c(2, 1, 2, 2, 2, 2, 2)))
v1
#[1] "2"   "1"   "2.1" "2.2" "2.3" "2.4" "2.5"

我们可以使用sub删除子字符串

sub("\\..*", "", v1)
#[1] "2" "1" "2" "2" "2" "2" "2"

使用“MetaQC”中的数据集

 library(MetaQC)
 data(brain)
 df <- brain[[1]][1:4, 1:4]
 is.matrix(df)
 #[1] TRUE

 rownames(df) <- NULL
 df
 #           2        1        2        2
 #[1,] 10.306062 9.896181 9.735218 9.954633
 #[2,]  8.065012 8.749869 7.446256 7.714932
 #[3,]  8.850187 9.618386 7.877744 9.139807
 #[4,]  9.358871 9.906740 9.636625 9.013183
相关问题