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

dplyr将字符串拆分为逗号分隔的列表,r,dplyr,R,Dplyr,我正在尝试使用dplyr将一个字符串拆分为一个逗号分隔的字符串,但我运气不太好 dat<-data.frame(key=1:4,labels=c('a','ab','abc','b')) dplyr或mutate与您的问题无关。您的问题更多地是试图将列表(由str\u split返回)视为向量 我将编写一个小函数来实现它: comma_sep = function(x) { x = strsplit(as.character(x), "") unlist(lapply(x

我正在尝试使用dplyr将一个字符串拆分为一个逗号分隔的字符串,但我运气不太好

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

dplyr
mutate
与您的问题无关。您的问题更多地是试图将列表(由
str\u 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

当然,您也可以将函数的内容塞进这一行。

用逗号替换每个非边界,如下所示:

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

mutate(dat,labels=strsplit(as.character(labels),“”)
,如果您想将元素保留在列表中(首选),或
mutate(dat,labels=sappy(strsplit(as.character(labels),“”),粘贴,折叠=“,”)
如果您想取消列出值,这是我使用的解决方案。你的解决方案也很好,太棒了。我正忙着写
\\K
,但忘记了
\\B
  key labels
1   1      a
2   2    a,b
3   3  a,b,c
4   4      b