如何拆分dataframe的字符向量列并提取唯一值为列表?
解决方法:提取Variable列的唯一拆分值
我来帮你解决这个问题!你的代码问题出在自定义的separator函数上——你用strsplit(x, ",")[[1]][[1]]只提取了每行拆分后的第一个元素,比如对于"a,b",只取了"a",最后去重自然只剩"a"了。下面是几种正确的实现方式:
方法1:基础R原生实现
不需要自定义函数,直接用strsplit+unlist+unique就能搞定:
df <- data.frame(Sl.No = c(1:6), Variable = c('a', 'a,b', 'a,b,c', 'b', 'c', 'b,c')) # 拆分所有元素 → 扁平化列表 → 提取唯一值 myList <- unique(unlist(strsplit(df$Variable, ","))) myList # 输出:[1] "a" "b" "c"
strsplit(df$Variable, ","):把每行的Variable按逗号拆分,返回一个列表,每个元素是对应行的拆分结果unlist():把嵌套的列表转换成一维向量unique():提取向量中的唯一值
方法2:修改你原来的函数
如果想保留apply的思路,只需要修改separator函数,让它返回拆分后的所有元素,而不是只取第一个:
separator <- function(x) strsplit(x, ",")[[1]] # 去掉多余的[[1]] myList <- unique(unlist(sapply(df$Variable, separator)))
方法3:tidyverse工具链(更直观)
如果你习惯用tidyverse系列包,用separate_rows可以更清晰地完成任务:
library(tidyverse) myList <- df %>% separate_rows(Variable, sep = ",") %>% # 把每个拆分元素拆成单独一行 distinct(Variable) %>% # 去重 pull(Variable) # 把列转换成向量
这样三种方法都能得到你想要的c("a", "b", "c")结果~
内容的提问来源于stack exchange,提问作者Raghavan vmvs
相关产品推荐
相关产品推荐

