【问题标题】:Group a list of elements into nested list based on pattern根据模式将元素列表分组到嵌套列表中
【发布时间】:2021-07-23 21:42:06
【问题描述】:

我有一个列表List_A,其中包含具有相似模式的元素。我正在尝试根据模式嵌套类似的项目。下面的例子

List_A <- list("Q_2020", "Q_2021", "C_2019", "C_2020", "K_2020")

输出:

# List of 5
# $ : chr "Q_2020"
# $ : chr "Q_2021"
# $ : chr "C_2019"
# $ : chr "C_2020"
# $ : chr "K_2020"

期望的输出:

# List of 3
# $ Q:List of 2
#  ..$ : chr "Q_2020"
#  ..$ : chr "Q_2021"
# $ C:List of 2
# ..$ : chr "C_2019"
# ..$ : chr "C_2020"
# $ K: chr "K_2020"

我知道该模式将在 "_" 之前,所以我使用 sub() 来获取该模式 - 但我想要一些关于如何创建嵌套列表的输入。我的尝试有点吵:1)提取模式,即 Q、K、C,2)创建嵌套列表骨架,3)循环 if 语句。

感谢任何输入。

【问题讨论】:

    标签: r list


    【解决方案1】:

    我们可以按子串分割

    v1 <- unlist(List_A)
    subv1 <- trimws(v1, whitespace = "_.*")
    List_A_new <- lapply(split(v1, factor(subv1, levels = unique(subv1))), as.list)
    

    -输出结构

    str(List_A_new)
    List of 3
     $ Q:List of 2
      ..$ : chr "Q_2020"
      ..$ : chr "Q_2021"
     $ C:List of 2
      ..$ : chr "C_2019"
      ..$ : chr "C_2020"
     $ K:List of 1
      ..$ : chr "K_2020"
    

    【讨论】:

      【解决方案2】:

      你需要这个吗?

      > str(split(List_A, factor(u <- substr(unlist(List_A), 1, 1), levels = unique(u))))
      List of 3
       $ Q:List of 2
        ..$ : chr "Q_2020"
        ..$ : chr "Q_2021"
       $ C:List of 2
        ..$ : chr "C_2019"
        ..$ : chr "C_2020"
       $ K:List of 1
        ..$ : chr "K_2020"
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-03-11
        • 1970-01-01
        • 1970-01-01
        • 2020-03-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多