【问题标题】:How to split and paste a string while mutating a dataframe?如何在变异数据框时拆分和粘贴字符串?
【发布时间】:2019-12-04 01:59:29
【问题描述】:

我有一个像这样的数据框:

x <- data.frame(filename = c("aa-b-c x", "c-dd-e y"), number=c(1,2))
  filename  number
1  aa-b-c x      1
2  c-dd-e y      2

我想改变文件名列,使其看起来像这样:

  filename number
1  c/aa/b      1
2  e/dd/c      2

这适用于单行:paste(str_match(x$filename[1], "(\\w+)-(\\w+)-(\\w+)")[c(4,2,3)], collapse = "/"),但在 mutate 内失败。我确定我缺少一个简单的修复方法。

【问题讨论】:

    标签: r dplyr


    【解决方案1】:

    一种选择是在作为一个组捕获后重新排列组件

    library(dplyr)
    library(stringr)
    x %>%
        mutate(filname  = str_replace(filename, 
             "^([a-z]+)-([a-z]+)-([a-z]+)\\s.*", "\\3/\\1/\\2"))
    

    【讨论】:

      【解决方案2】:

      str_match 当你给它多个向量时返回一个矩阵。这应该工作得很好:

      apply(str_match(x$filename, "(\\w+)-(\\w+)-(\\w+)")[, c(4,2,3), drop = FALSE], 1, paste, collapse = "/")
      # [1] "c/aa/b" "e/c/dd"
      

      drop = FALSE 是在只有一行的情况下保持输出矩阵所必需的。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-07-16
        • 2021-02-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多