如果我在每个单元格中的多个单词中有多个单词(由","分隔)。 如何获取每列的唯一单词列表? 例如:
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]
答案 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