【问题标题】:R remove suffix from variable names in data frameR从数据框中的变量名中删除后缀
【发布时间】:2020-04-14 10:33:13
【问题描述】:

我正在尝试删除 R 中数据框变量名称的后缀以聚合这些列。

我已将 Excel 表导入到 R 中的数据框中,但导入的列名是这样的

var1...9   var2...10   var1...11   var2...12   var3.name...13
      12           7           5          10                6
       3           9          20           7               13

我需要删除最后一部分(从...)以按名称聚合列。

var1   var2   var3.name
  17     17           6
  23     16          13

为此,我正在使用 dplyr

library(dplyr)
x %>% 
  rename_at(.vars = vars(ends_with("...*")),
            .funs = funs(sub("[...]*$", "", .)))

但不起作用,我认为使用 * 不是使用通配符的合适方式...

【问题讨论】:

    标签: r dataframe dplyr wildcard calculated-columns


    【解决方案1】:

    使用rename_at,我们可以使用matches 代替ends_with,因为ends_with 字面意思是对字符进行固定匹配,即.*,而不是三个点后跟数字。

    library(dplyr)
    library(stringr)
    x %>%
        rename_at(vars(matches('\\.{3}\\d+$')), ~ str_remove(., "\\.{3}\\d+$"))
    

    注意:当我们这样做时,它还会根据输入示例返回具有重复列名(不推荐)的 data.frame/tibble。

    【讨论】:

    • 我同意不建议使用重复的列名,但我的意思是按列名求和。
    • @Viskovitz 如果是这样的话。你可以做sapply(split.default(x, sub("\\.{3}.*", "", names(x))), rowSums)
    【解决方案2】:

    我实际上认为在这里使用 base R 更容易:

    names(x) <- sub("\\.{3}\\d*$", "", names(x))
    

    【讨论】:

      猜你喜欢
      • 2020-02-13
      • 1970-01-01
      • 2019-06-03
      • 2021-10-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-04
      相关资源
      最近更新 更多