【问题标题】:Split a list whose elements are multiple element lists拆分其元素为多个元素列表的列表
【发布时间】:2017-07-24 12:56:27
【问题描述】:

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

【问题讨论】:

  • unique(unlist(sapply(a, function(i) strsplit(i, ';'))))
  • 嘿@Sotos 你能把这个作为答案提交给我吗?这非常有效。
  • 实际上,当我需要一个列表时,这会返回一个类字符的结果。
  • @Miha 答案就是你所需要的

标签: r string list strsplit


【解决方案1】:

一种选择是在您的列表中使用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"

【讨论】:

  • 你可以使用strsplit(unlist(a)),它适用于来自base R的strsplit(实际上不需要library(stringr)
  • @Miha 我们有一个“Rkoholiki”的松懈。如果您想加入我们,请在 gmail 的 romunov 给我打个电话。此消息将在 XY 分钟内自毁。 :)
【解决方案2】:

base R 中的一种替代方法是使用rapply,它将一个函数应用于嵌套列表中最内层的每个元素,并默认返回最简化的对象。在这里,它返回一个字符向量。

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

要返回一个列表,请将输出包装在list

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

【讨论】:

    猜你喜欢
    • 2017-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-30
    • 2023-03-10
    • 2021-08-10
    • 1970-01-01
    • 2014-06-02
    相关资源
    最近更新 更多