突变数据框时如何拆分和粘贴字符串?

时间:2019-12-03 17:42:57

标签: r dplyr

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

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内部失败。我确定我缺少一个简单的修复程序。

2 个答案:

答案 0 :(得分:2)

一种选择是在成组捕获后重新排列组件

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

答案 1 :(得分: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对于保持输出矩阵是必要的。