使用参考数据框重命名数据框行名时遇重复行名错误
用参考数据框重命名数据框行名时遇到重复值错误
我想用条目更多的参考数据框pathways_ref给abundance数据框重命名行名,尝试了以下代码,但触发了重复行名不允许的错误。
尝试的代码
x <- row.names(abundance) copy <- pathways_ref$Name[match(x, pathways_ref$ID)] row.names(abundance) <- c(copy) row.names(abundance) <- pathways_ref$Name[match(x, pathways_ref$ID)]
报错信息
Error in
.rowNamesDF<-(x, value = value) :
duplicate 'row.names' are not allowed
In addition: Warning message:
non-unique values when setting 'row.names':
数据框示例
原始数据框abundance
head(abundance) S230047s S230054s S230073s S230077s ko05340 13.50 33.6 1.50 15.70 ko00564 166.50 387.6 22.50 196.70 ko00680 256.00 566.5 27.00 278.00 ko00562 28.25 59.9 2.25 38.55 ko03030 169.25 393.6 14.25 204.95 ko00561 93.50 193.9 10.50 107.30
参考数据框pathways_ref
head(pathways_ref) ID Name 1 ko01100 Metabolic pathways 2 ko01110 Biosynthesis of secondary metabolites 3 ko01120 Microbial metabolism in diverse environments 4 ko01200 Carbon metabolism 5 ko01210 2-Oxocarboxylic acid metabolism 6 ko01212 Fatty acid metabolism
解决方法
错误核心是pathways_ref$Name存在重复值,而行名要求必须唯一,可通过以下方式处理:
- 保留ID+名称组合行名:兼顾唯一性和可读性
pathway_names <- pathways_ref$Name[match(row.names(abundance), pathways_ref$ID)] row.names(abundance) <- paste(row.names(abundance), pathway_names, sep = " - ")
- 给重复名称加后缀区分:仅用名称,自动为重复项添加序号
name_vec <- pathways_ref$Name[match(row.names(abundance), pathways_ref$ID)] name_vec <- make.unique(name_vec, sep = "_") row.names(abundance) <- name_vec
- 先排查参考数据框重复项:定位重复名称后再决定是否修正源数据
# 查看重复的名称值 duplicated_names <- pathways_ref$Name[duplicated(pathways_ref$Name)] unique(duplicated_names)
内容的提问来源于stack exchange,提问作者Kimi Li
相关产品推荐
相关产品推荐

