【问题标题】:search and replace functions to rename columns搜索和替换函数以重命名列
【发布时间】:2016-10-17 09:42:17
【问题描述】:

我有这样的数据框

> 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

我可以用重命名字符串来做,但由于数据量很大,我想使用搜索和替换选项 非常感谢提前

【问题讨论】:

    标签: r dataframe rename


    【解决方案1】:

    根据 OP 帖子中显示的示例,. 之后的后缀部分似乎应该是前缀,反之亦然。在这种情况下,我们可以使用sub 来捕获不是. 的字符,然后是.,然后捕获其余字符((.*))并将其替换为相应排列的反向引用。

    names(d) <- sub("([^.]+).(.*)", "\\2_\\1", names(d))
    names(d)
    #[1] "aaa_team" "aab_team" "aac_team"
    

    或者另一种选择是将字符串拆分为.,然后在颠倒顺序后paste

    sapply(strsplit(names(d), "[.]"), function(x) paste(rev(x), collapse="_"))
    

    或者正如 @jota 在 cmets 中提到的,如果 'team' 始终是第一个单词,我们可以使用 sub 使其更紧凑

    sub("team\\.(.*)", "\\1_team", names(d)) 
    

    【讨论】:

    • 非常感谢
    • 如果“团队”始终是第一个词:gsub("team\\.(.*)", "\\1_team", names(d), perl = TRUE)
    • @jota 非常感谢您提到“团队”并不总是第一个词,我有一些名称为“build_MS2_aab”的列,我想要的输出将是“aab_build_MS2”。非常感谢提前
    猜你喜欢
    • 2023-02-08
    • 2012-03-23
    • 2018-09-28
    • 1970-01-01
    • 2019-09-28
    • 1970-01-01
    • 2023-03-27
    • 2012-01-20
    • 1970-01-01
    相关资源
    最近更新 更多