Search code examples
rstringliststrsplit

Split a list whose elements are multiple element lists


Say I have a list a which is defined as:

a <- list("aaa;bbb", "aaa", "bbb", "aaa;ccc")

I want to split this list by semicolon ;, get only unique values, and return another list. So far I have split the list using str_split():

a <- str_split(a, ";")

which gives me

> a
[[1]]
[1] "aaa" "bbb"

[[2]]
[1] "aaa"

[[3]]
[1] "bbb"

[[4]]
[1] "aaa" "ccc"

How can I manipulate this list (using unique()?) to give me something like

[[1]]
[1] "aaa" 

[[2]]
[1] "bbb"

[[3]]
[1] "ccc"

or more simply,

[[1]]
[1] "aaa" "bbb" "ccc"

Solution

  • One option is to use list() with unique() and unlist() inside your list.

        # 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"