2017-07-24 62 views
0

說我有一個列表a其定義爲一個列表:分裂的元素是多元素列表

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

我想用分號;分裂這份名單中,獲得唯一的值,然後返回另一個名單。到目前爲止,我已經分裂使用str_split()名單:這使我

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

[[2]] 
[1] "aaa" 

[[3]] 
[1] "bbb" 

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

如何操作這個名單(?使用unique()

a <- str_split(a, ";")

給我像

[[1]] 
[1] "aaa" 

[[2]] 
[1] "bbb" 

[[3]] 
[1] "ccc" 

或更簡單,

[[1]] 
[1] "aaa" "bbb" "ccc" 
+3

'獨特( ';' 不公開(sapply(一個,函數(I)strsplit(I))))返回一個列表,包輸出' – Sotos

+0

喂@Sotos可以請你提交這個答案,我可以接受嗎?這很奇妙。 –

+0

實際上,當我需要一個列表時,這會返回類字符的結果。 –

回答

3

一個選項是在列表中使用list()unique()unlist()。在基礎R

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

你可以使用'strsplit(unlist(a))',它可以與基本R中的'strsplit'一起工作(不需要'library(stringr)' –

+0

@Miha我們有一個「Rkoholiki 「鬆弛下去,如果你想加入我們,請給我一個位於gmail的romunov一行,這條消息將在XY分鐘內自行破壞:) –

+0

@RomanLuštrik哈哈:)。 Thx,會做到這一點:)。 – Miha

4

一個替代方案是使用rapply它適用於在每一個嵌套列表最內部元件的功能和默認返回最簡化的對象成爲可能。在這裏,它返回一個字符向量。

unique(rapply(a, strsplit, split=";")) 
[1] "aaa" "bbb" "ccc" 

list

list(unique(rapply(a, strsplit, split=";"))) 
[[1]] 
[1] "aaa" "bbb" "ccc"