我正在尝试使用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
来解决这个问题?
答案 0 :(得分:0)
替换时,您还可以返回到找到的值的一部分,其中“ \ 1”(因此R中的“ \ 1”)表示:括号之间的第一部分。
colnames(df) <- sub("(.)_frq$", "frq \\1", colnames(df))
这会将“ X_frq”之类的所有内容替换为“ frq X”,并且不匹配的名称将保持不变。
但是正如评论中所说,也许没有空格的名称可能是一个更好的主意。