我正在尝试使用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=','))
答案 0 :(得分:4)
dplyr
或mutate
与您的问题无关。您的问题更像是试图将列表(由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