You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言设置行名报错:不允许重复row.names问题求助

微生物组数据处理:LassoGLMM矩阵构建时的重复行名问题

问题背景

处理大型微生物组数据集,为运行LassoGLMM需基于数据框Lasdf创建4个矩阵,第一个矩阵已成功生成:

## Data should be in the following formats:
# tMBdat: 16S/ITS relative abundance data in 1 matrix, samples in rows and OTUs/species in columns with identifiable names
MBdat<- create.matrix(Lasdf, tax.name = "Genus",
                    locality = "SampleID",
                    abund.col = "Abundance",
                    abund = TRUE)
#Transpose it using the function t(df) to change Genus to the columns and Sample to the rows.
tMBdat<-t(MBdat)

报错情况

创建第二个矩阵时执行以下代码:

# dat: continuous response variables in 1 matrix, samples in rows, and variables in columns with identifiable names
dat<- subset(Lasdf, select = c(SampleID, Total_Dose_CaptureGh))
dat %>% remove_rownames %>% column_to_rownames(var="SampleID")

触发报错:

Error in `.rowNamesDF<-`(x, value = value) : 
  duplicate 'row.names' are not allowed
In addition: Warning message:
non-unique values when setting 'row.names': ‘WB20190114_1_DU_WB20190114_1’, ‘WB20190114_2_JE_WB20190114_1’, ‘WB20190114_3_IL_WB20190114_1’, ‘WB20190114_4_CE_WB20190114_1’, ‘WB20190114_5_CO_WB20190114_1’, [... truncated] 

原以为SampleID值唯一,但实际存在重复。

数据样本

Lasdf的前6行数据如下:

head(Lasdf)
           Sample Abundance    Individual GIT Sex AgeClass Total_Dose_CaptureGh
1 WB20190205_01JE   0.92150 WB20190205_O1  JE   F    Adult            4.9035521
2 WB20190205_01DU   0.83575 WB20190205_O1  DU   F    Adult            4.9035521
3  WB20190221_1JE   0.75350 WB20190221_C1  JE   M Subadult            0.2390906
4 WB20190130_01JE   0.73975 WB20190130_O1  JE   F    Adult            2.3538941
5  WB20190128_2DU   0.73575  WB20190128_2  DU   M    Adult            0.2145515
6  WB20190217_2JE   0.70800 WB20190217_C2  JE   F Yearling            0.2980213
                        Genus                      SampleID
1               Lactobacillus WB20190205_01JE_WB20190205_O1
2               Lactobacillus WB20190205_01DU_WB20190205_O1
3               Lactobacillus  WB20190221_1JE_WB20190221_C1
4 Clostridium_sensu_stricto_1 WB20190130_01JE_WB20190130_O1
5   Family_Enterobacteriaceae   WB20190128_2DU_WB20190128_2
6               Lactobacillus  WB20190217_2JE_WB20190217_C2

解决步骤

1. 排查重复的SampleID

先运行代码确认哪些SampleID重复及重复次数:

# 统计重复的SampleID及其出现次数
Dupe_Samples <- Lasdf %>% 
  count(SampleID) %>% 
  filter(n > 1)

print(Dupe_Samples)

2. 处理重复数据

根据重复数据的具体情况选择对应方式:

  • 若同一SampleID对应Total_Dose_CaptureGh值一致:直接去重保留唯一行
# 去重,保留每个SampleID的唯一记录
dat_clean <- Lasdf %>% 
  select(SampleID, Total_Dose_CaptureGh) %>% 
  distinct(SampleID, .keep_all = TRUE) %>% 
  remove_rownames %>% 
  column_to_rownames(var = "SampleID")
  • 若同一SampleID对应Total_Dose_CaptureGh值不一致:检查数据录入错误,或按实验设计聚合(如取均值)
# 按SampleID聚合,取Total_Dose_CaptureGh的均值
dat_clean <- Lasdf %>% 
  group_by(SampleID) %>% 
  summarise(Total_Dose_CaptureGh = mean(Total_Dose_CaptureGh, na.rm = TRUE)) %>% 
  ungroup() %>% 
  remove_rownames %>% 
  column_to_rownames(var = "SampleID")

3. 验证处理结果

确认处理后的数据无重复行名:

# 检查是否存在重复行名,输出应为FALSE
any(duplicated(rownames(dat_clean)))

内容的提问来源于stack exchange,提问作者Laura Peirson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 16:05:17