R:计算每个单元格中包含多个单词的列中的唯一单词

时间:2015-11-27 02:29:24

标签: r string word-count

如果我在每个单元格中的多个单词中有多个单词(由","分隔)。 如何获取每列的唯一单词列表? 例如:

    var1 | var2 | var3
    a,b  | a,b  | a,c
    a,x  | b,s  | d,s
    a,d  | b,m  | e,m

我希望以列表/数据框格式得到结果:

      var1     |   var2     |   var3
    [a,b,d,x]  | [a,b,s,m]  | [a,c,d,s,e,m]

2 个答案:

答案 0 :(得分:5)

您可以在strsplit声明中使用unique + lapply执行此操作:

lapply(mydf, function(x) unique(trimws(unlist(strsplit(x, ",")))))
## $var1
## [1] "a" "b" "x" "d"
## 
## $var2
## [1] "a" "b" "s" "m"
## 
## $var3
## [1] "a" "c" "d" "s" "e" "m"
## 

如果您想要一个字符串作为结果,请在其中添加toString,然后您可以将整个内容包装在data.frame中以获取data.frame而不是{{1} }}:

list

如果您确实需要方括号而且"单词"之间没有空格,那么您可以使用data.frame(lapply(mydf, function(x) toString(unique(trimws(unlist(strsplit(x, ","))))))) ## var1 var2 var3 ## 1 a, b, x, d a, b, s, m a, c, d, s, e, m + sprintf。假设我们已将第一个paste语句中列表的输出存储为" temp",请尝试:

lapply

答案 1 :(得分:1)

这是一个整洁的方法:

library(dplyr)

data = 
  data_frame(
    var1 = list(c("a", "b"),
                c("a", "x") ),
    var2 = list(c("a", "b"),
                c("b", "s") ) )

long_data = 
  data %>%
  as.list %>%
  lapply(. %>% 
           lapply(. %>% 
                    data_frame(value = .) ) %>%
           bind_rows(.id = "row") ) %>%
  bind_rows(.id = "column") %>%
  group_by(column, row) %>%
  mutate(order = 1:n() )

long_data %>%
  select(-row) %>%
  distinct