拆分其元素为多个元素列表的列表

时间:2017-07-24 12:56:27

标签: r string list strsplit

说我有一个列表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"

2 个答案:

答案 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"