将第一列设置为rowname,尽管有重复

时间:2015-01-05 17:29:59

标签: r dataframe duplicates rowname

 sample
      Symobls  IDs Value1 Value2 Value3
 1     NA      NA   3.1    2.3    1.7
 2     TP53   1234  5.8    6.9    10.1
 3     Kras   5678  0.1    0.3    0.5
 4     NA      NA   10.3   2.1    7.9
 5     Hras   9991  20.0   30.0   40.0
 6     TP53   1234  -3.1   0.2    1.7

我的表看起来像这个。 我需要按行或列来计算值。 所以,我尝试使用符号作为新的行名。通过这种方式,我可以使用样本[," Hras"]来计算整行值。 当试图这样做时,我遇到了这个问题。

  

rownames(样品)LT; -sample [1]

     

row.names<-.data.frame*tmp*,值=值)出错:     重复&#39; row.names&#39;不允许   另外:警告信息:   设置&#39; row.names&#39;:'A1CF','A2M','A2ML1','AAGAB','AAK1','AAMDC','AARS2','AASDH','时的非唯一值AASDHPPT','AASS','ABAT','ABCA1','ABCA13','ABCA2','ABCA4','ABCA5','ABCA8','ABCA9','ABCB1','ABCB11','ABCB4' ,'ABCB5','ABCB6','ABCB8','ABCB9','ABCC1','ABCC10','ABCC11','ABCC12','ABCC13','ABCC3','ABCC4','ABCC5',' ABCC6','ABCC8','ABCC9','ABCD3','ABCD4','ABCE1','ABCF2','ABCG1','ABHD1','ABHD10','ABHD11','ABHD12','ABHD13' ,'ABHD17B','ABHD2','ABHD5','ABHD6','ABI1','ABI2','ABI3BP','ABL2','ABLIM1','ABLIM2','ABO','ABR',' ABRA','ABTB1','ABTB2','ACAA1','ACAA2','ACACA','ACACB','ACAD10','ACADL','ACADSB','ACAN','ACAP1','ACAP2' ,'ACAP3','ACAT 1',��[...截断]

这是因为&#34; NA&#34;?其他选择? 感谢

这是一个微阵列数据集。我已经完成了标准化,并提取了几个基因的值来进行绘图,互相关和t检验。事实上,不仅NA而且我将用于绘制图形的几个基因都有多行。所以,我需要将它们提取到另一个表中供以后使用。

1 个答案:

答案 0 :(得分:0)

在这里,我只是回答了一个方法,可以根据您在问题中的要求更改row.names。最终目标尚不清楚。对于指定的问题,您可以尝试将make.names与选项unique=TRUE一起使用。这将确保重复项的命名方式不同。在第一列中,有NA个值,这些值将被命名为NA.NA..1等。(如果可以的话)。

 row.names(sample) <- make.names(sample[,1],TRUE)

或者@Richard Scriven评论,

row.names(sample) <- paste(make.unique(df[,1]))

另一种选择是将data.frame转换为matrix(这将允许重复值)。只有当columns属于同一类时,我才会推荐这个。例如,如果您有characternumeric列,则会将所有列转换为character类。在您的数据集中,在我看来除了第一列之外,所有其他都是数字(可能除了“ID”列)。但是NA值再次成为问题。如果你想根据rownames对'1st'或'3rd'行进行子集化,那将很困难。

sample1 <- as.matrix(sample[,-1])
row.names(sample1) <- sample[,1]
sample1['Hras',]
#  IDs Value1 Value2 Value3 
#  9991     20     30     40