【问题标题】:Set first column as rowname, in spite of duplicates将第一列设置为行名,尽管有重复
【发布时间】:2015-01-05 17:29:59
【问题描述】:
 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

我的桌子看起来像这样。 我需要按行或按列计算值。 所以,我尝试使用符号作为新的行名。这样,我可以使用 sample[,"Hras"] 计算整行值 尝试这样做时,我遇到了这个问题。

行名(样本)

row.names<-.data.frame(*tmp*, value = value) 中的错误: 不允许重复的“row.names” 另外:警告信息: 设置“row.names”时的非唯一值:“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', 'ACAT1', �� [... 截断]

这是因为“NA”吗?其他选择? 谢谢

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

【问题讨论】:

  • 不,这是因为错误消息说“不允许重复 'row.names'”。
  • 错误告诉你发生了什么
  • 为什么需要更改数据才能做到这一点?有rowSumsrowMeans 函数。但你还没有告诉我们你在计算什么
  • 正如理查德所说,他们应该是实现您想要做的更简单的方法。请提供更多上下文。 (你指的是什么价值观?)

标签: r dataframe duplicates rowname


【解决方案1】:

在这里,我只是按照您在问题中的要求回答一种更改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 类。在您的数据集中,在我看来,除了第一列之外,所有其他列都是数字(“IDs”列可能除外)。但同样NA 值将是一个问题。如果您想根据行名对“第一”或“第三”行进行子集化,这将很困难。

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

【讨论】:

  • @RichardScriven 我刚刚通过测试注意到row.names(sample) &lt;- make.unique(sample[,1])# Error in row.names&lt;-.data.frame(*tmp*, value = c(NA, "TP53", "Kras", : missing values in 'row.names' are not allowed
  • 我想你可以在运行 make.unique 之前欺骗 R 并用 paste(NA) 替换 NA 值,但你没有从我这里听到 :-) is.na(paste(NA)) # [1] FALSE
  • 对我来说都是假的,is.na(paste(make.unique(df[,1]))) [1] FALSE FALSE FALSE FALSE FALSE
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-05-12
  • 1970-01-01
  • 1970-01-01
  • 2012-12-14
  • 2020-08-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多