使用`sub`重命名数据框中的列

时间:2018-12-19 00:09:46

标签: r regex

我正在尝试使用sub重命名大型数据框中的列,但是在使用replacementx参数时遇到了麻烦。 我有一个如下数据框:

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_numberB_number更改为ABcolnames(df) <- sub("\\_number$", "", colnames(df))。但是我之后尝试更改A_frqB_frq,并尝试colnames(df) <- sub("\\_frq$", "", paste("frq ", colnames(df))),它将所有列名称更改为frq Afrq B。我还考虑过使用colnames(df) <- sub("\\_frq$", "", colnames(df))并在以后添加frq,但是现在所有列现在都是AB,我无法找出哪些是A_frqB_frq。有没有一种简单的方法可以使用sub来解决这个问题?

1 个答案:

答案 0 :(得分:0)

替换时,您还可以返回到找到的值的一部分,其中“ \ 1”(因此R中的“ \ 1”)表示:括号之间的第一部分。

colnames(df) <- sub("(.)_frq$", "frq \\1", colnames(df))

这会将“ X_frq”之类的所有内容替换为“ frq X”,并且不匹配的名称将保持不变。

但是正如评论中所说,也许没有空格的名称可能是一个更好的主意。