dplyr将字符串拆分为逗号分隔列表

时间:2016-06-01 21:26:33

标签: r dplyr

我正在尝试使用dplyr将字符串拆分为逗号分隔的字符串,但我没有太多运气。

dat<-data.frame(key=1:4,labels=c('a','ab','abc','b'))

我正在尝试将标签列设为c('a','a,b','a,b,c','b')

我已经尝试了以下所有变化,但似乎没有任何效果。

dat %>%
  mutate(labels=str_split(labels,''))

dat %>%
  mutate(labels=str_split(labels,'')[[1]])

dat %>%
  mutate(labels=paste(str_split(labels,''),collapse=','))

2 个答案:

答案 0 :(得分:4)

dplyrmutate与您的问题无关。您的问题更像是试图将列表(由str_split返回)视为向量。

我会写一个小功能来做到这一点:

comma_sep = function(x) {
    x = strsplit(as.character(x), "")
    unlist(lapply(x, paste, collapse = ','))
}

然后你可以

mutate(dat, labels = comma_sep(labels))
#   key labels
# 1   1      a
# 2   2    a,b
# 3   3  a,b,c
# 4   4      b

但当然你也可以把功能的内容塞进那一行。

答案 1 :(得分:4)

用这样的逗号替换每个非边界:

dat %>% mutate(labels = gsub("\\B", ",", labels, perl = TRUE))

或者使用稍微复杂的正则表达式,但是如果没有perl = TRUE,请替换后面跟着该字符后跟逗号的非边界的每个字符:

dat %>% mutate(labels = gsub("(.)\\B", "\\1,", labels))

任何一个都给出:

  key labels
1   1      a
2   2    a,b
3   3  a,b,c
4   4      b