更改行名称在R中返回“不允许重复的“ row.names””

问题描述

我尝试通过以下代码将行名从formate的“ data07_2470178_2”更改为“ 2470178”:

rownames(df) <-regmatches(rownames(df),gregexpr("(?<=_)[[:alnum:]]{7}",rownames(df),perl = TRUE))

但是它返回以下错误

Error in `.rowNamesDF<-`(x,value = value) : duplicate 'row.names' are not allowed

数据集简要如下:

                    1  2   3  4
data143_2220020_1  24  87  3  32
data143_2220020_2  24  87  3  32
data105_2220058_1  26  91  3  36
data105_2220058_2  26  91  3  36
data134_2221056_2  13  40  3  17
data134_2221056_1  13  40  3  17

我希望我的数据集看起来像这样。对于每个原始行,仅保留以“ _2”结尾的行:

          1  2   3  4
2220020  24  87  3  32
2220058  26  91  3  36
2221056  13  40  3  17

我真的不明白为什么会这样?另外,如何正确更改行名?有人可以帮忙吗?预先感谢!

解决方法

如果要基于行名删除行,可以使用:

rn <- sub('.*_(\\d+)_.*','\\1',rownames(df))
df1 <- df[!duplicated(rn),]
rownames(df1) <- unique(rn)
df1
#         1  2 3  4
#2220020 24 87 3 32
#2220058 26 91 3 36
#2221056 13 40 3 17

但是,unique(df)会自动为您提供唯一的行,并且您可以根据上述方法更改行名。

数据

df <- structure(list(`1` = c(24L,24L,26L,13L,13L),`2` = c(87L,87L,91L,40L,40L),`3` = c(3L,3L,3L),`4` = c(32L,32L,36L,17L,17L)),class = "data.frame",row.names = c("data143_2220020_1","data143_2220020_2","data105_2220058_1","data105_2220058_2","data134_2221056_2","data134_2221056_1"))