我有这样的数据框
> d <- data.frame(team.aaa=1:3, team.aab=4:6, team.aac=7:9)
> d
# team.aaa team.aab team.aac
#1 1 4 7
#2 2 5 8
以及所需的输出
d <- rename(d, c("team.aaa"="aaa_team", "team.aab"="aab_team", "team.aac"="aac_team"))
> d
# aaa_team aab_team aac_team
#1 1 4 7
#2 2 5 8
#3 3 6 9
我可以通过重命名字符串来做到这一点,但由于数据量巨大而想使用搜索和替换选项 非常感谢提前
最佳答案
根据OP帖子中显示的示例,似乎.
后面的后缀部分应该是前缀,反之亦然。在这种情况下,我们可以使用 sub
捕获不是 .
后跟 .
的字符,然后捕获其余字符 ( (.*)
) 并将其替换为相应排列的反向引用。
names(d) <- sub("([^.]+).(.*)", "\\2_\\1", names(d))
names(d)
#[1] "aaa_team" "aab_team" "aac_team"
或者另一种选择是按 .
分割字符串,然后在颠倒顺序后粘贴
sapply(strsplit(names(d), "[.]"), function(x) paste(rev(x), collapse="_"))
或者正如 @jota 在评论中提到的,如果“team”始终是第一个词,我们可以使用 sub
使其更加紧凑
sub("team\\.(.*)", "\\1_team", names(d))
关于r - 搜索和替换功能以重命名列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37849594/