我尝试使用sub
来重命名大型数据框中的列,但在使用replacement
和x
参数时遇到了麻烦。我有一个数据框,如下所示:
df <- as.data.frame(cbind(1:3, 4:6, 7:9, 10:12))
colnames(df) <- c("A_number", "A_frq", "B_number", "B_frq")
我需要列名为colnames(df) <- c("A", "frq A", "B", "frq B")
。我的实际数据有更多的列,所以我尝试使用模式一次重命名每一列。
我能够使用以下代码将A_number
和B_number
更改为A
和B
:colnames(df) <- sub("\\_number$", "", colnames(df))
。但是在此之后,我尝试更改A_frq
和B_frq
,并尝试了colnames(df) <- sub("\\_frq$", "", paste("frq ", colnames(df)))
,它将所有列名都更改为frq A
或frq B
。我也考虑过使用colnames(df) <- sub("\\_frq$", "", colnames(df))
并在以后添加frq
,但是现在所有的列都是A
或B
,我不知道哪一列是A_frq
或B_frq
。有没有一种简单的方法可以使用sub
来解决这个问题?
发布于 2018-12-19 08:24:45
在替换时,您还可以引用找到的值的一部分,其中"\1“(因此R中的"\1”)表示:括号之间的第一部分。
colnames(df) <- sub("(.)_frq$", "frq \\1", colnames(df))
这将用"frq X“替换所有像"X_frq”这样的名称,而不匹配的名称将保持不变。
但正如评论中所说,也许一个没有空格的名字可能是一个更好的想法。
https://stackoverflow.com/questions/53842884
复制相似问题