Error in `.rowNamesDF<-`(x, value = value) :
missing values in 'row.names' are not allowed
解决方案
library(stringr) # used for str_replace_all()
df <- data.frame(
x = rep(1:5),
y = rep(11:15),
row.names = LETTERS[1:5]
)
df
# x y
# A 1 11
# B 2 12
# C 3 13
# D 4 14
# E 5 15
change <- c("A" = "a", "C" = "c")
row.names(df) <- str_replace_all(row.names(df), change)
df
# x y
# a 1 11
# B 2 12
# c 3 13
# D 4 14
# E 5 15
4条答案
按热度按时间ct2axkht1#
或者
case_when()
对你来说更容易:您为每个重叠区指定新值,并为所有其余情况指定值(其中为
TRUE ~ rownames(df)
行)-对于其余情况,我保留上面的前一行名称。1dkrff032#
如果你想重命名所有行,并且你有一个所需新名称的数组按顺序:
如果你想重命名所有行,并且你有一个命名的数组(不一定顺序正确):
如果你只想重命名一些行,并且有一个命名的数组(有序数组在此上下文中没有意义):
这是一个有点笨拙;如果你只是替换一个或两个行名称,那么@TimTeaFan的第一个建议可能更容易。
pvabu6sv3#
我们可以采取以下措施:
如果我们想重命名更多的
rownames
,我们可以使用%in%
,但正如@gss在评论中提到的,这是一个警告:无论名称在%in%
之后的字符向量中的顺序如何,名称都将按照它们在rownames()
中出现的顺序被替换。比较以下两个调用:其结果与以下相同:
创建于2021-12-21由reprex package(v2.0.1)
k3bvogb14#
最安全的方法,也是OP更喜欢使用预定义的命名向量的方法是使用当前的行名,替换那些定义的行名并再次设置行名。这不会在不完整的向量上失败,如果它不能被替换,它会保持以前的状态。
此解决方案的优点是,如果您的重命名向量不完整,可以防止以下错误。
解决方案