说我有一个列表a
,定义为:
a <- list("aaa;bbb", "aaa", "bbb", "aaa;ccc")
我想用分号;
拆分此列表,只获取唯一值,然后返回另一个列表。到目前为止,我已使用str_split()
分割列表:
a <- str_split(a, ";")
给了我
> a
[[1]]
[1] "aaa" "bbb"
[[2]]
[1] "aaa"
[[3]]
[1] "bbb"
[[4]]
[1] "aaa" "ccc"
如何操作此列表(使用unique()
?)给我一些类似
[[1]]
[1] "aaa"
[[2]]
[1] "bbb"
[[3]]
[1] "ccc"
或更简单地说,
[[1]]
[1] "aaa" "bbb" "ccc"
答案 0 :(得分:4)
基础R中的一个替代方法是使用rapply
将函数应用于嵌套列表中的每个最内层元素,并默认返回最简化的对象。在这里,它返回一个字符向量。
unique(rapply(a, strsplit, split=";"))
[1] "aaa" "bbb" "ccc"
要返回列表,请将输出包装在list
list(unique(rapply(a, strsplit, split=";")))
[[1]]
[1] "aaa" "bbb" "ccc"
答案 1 :(得分:3)
一种选择是在列表中使用list()
unique()
和unlist()
。
# So first you use your code
a <- list("aaa;bbb", "aaa", "bbb", "aaa;ccc")
# Load required library
library(stringr) # load str_split
a <- str_split(a, ";")
# Finally use list() with unique() and unlist()
list(unique(unlist(a)))
# And the otuput
[[1]]
[1] "aaa" "bbb" "ccc"