2017-06-21 134 views
1

我有一个2列数据框,其中第一列是一个数字,第二列包含一个研究类别列表。我的数据的简化版本:删除R中单元格的重复单词

aa <- data.frame(a=c(1:4),b=c("Fisheries, Fisheries, Geography, Marine Biology", 
"Fisheries", "Marine Biology, Marine Biology, Fisheries, Zoology", "Geography")) 

我想B列转换为元素的唯一列表,即删除重复的,所以最终的结果是

a  b 
    1  Fisheries, Geography, Marine Biology 
    2  Fisheries 
    3  Marine Biology, Fisheries, Zoology 
    4  Geography 

我能对列表中的各个元素执行此操作,例如,使用唯一(unlist(strsplit(aa [1])))但是仅针对单个元素,而不是整个列(否则它会返回整个列的单个唯一列表)。我无法弄清楚如何为整个清单做到这一点,一次一个元素。也许与lapply和写我自己的函数* unique(unlist(strsplit()))?

非常感谢!

+1

像这样将工作:'sapply(strsplit(as.character(AA $ B), “ ”),函数(x)的糊状(唯一的(X),塌陷=“”))' 。 – lmo

+0

这有效!完善!非常感谢。 –

回答

0

这应该适合你。

aa <- data.frame(a=c(1:4),b=c("Fisheries, Fisheries, Geography, Marine Biology", 
           "Fisheries", "Marine Biology, Marine Biology, Fisheries, Zoology", "Geography")) 

aa$b <- sapply(aa$b, function(x) paste(unique(unlist(str_split(x,", "))), collapse = ", ")) 
+0

嘿!你是最好的!我只需要先将aa $ b转换为字符(是一个因子),然后它就做到了!太棒了 - 非常感谢。 –