首页 > 解决方案 > 将文本列转换为 r 中的向量

问题描述

我想看看文本列是否有“a”和“b”指定值之外的元素

specified_value=c("a","b")

df=data.frame(key=c(1,2,3,4),text=c("a,b,c","a,d","1,2","a,b")
df_out=data.frame(key=c(1,2,3),text=c("c","d","1,2",NA))

这是我尝试过的:

df=df%>%mutate(text_vector=strsplit(text, split=","), 
extra=text_vector[which(!text_vector %in% specified_value)])

但这不起作用,有什么建议吗?

标签: rstringvectorstrsplit

解决方案


我们可以通过分隔符拆分“文本” ,separate_rows按“键”分组,将不在“指定值”中的元素setdiffpaste它们一起(toString),然后进行连接以获取原始数据集中的其他列

library(dplyr) # >= 1.0.0
library(tidyr)
df %>%
    separate_rows(text) %>%
    group_by(key) %>% 
    summarise(extra = toString(setdiff(text, specified_value))) %>%
    left_join(df) %>%
    mutate(extra = na_if(extra, ""))
# A tibble: 4 x 3
#    key extra text 
#  <dbl> <chr> <chr>
#1     1 c     a,b,c
#2     2 d     a,d  
#3     3 1, 2  1,2  
#4     4 <NA>  a,b  

推荐阅读