问题描述
我尝试通过以下代码将行名从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"))