【问题标题】:Add one variable containing the name of each FINAL list (in a list of lists) in R在 R 中添加一个包含每个 FINAL 列表(在列表列表中)名称的变量
【发布时间】:2022-01-09 21:16:24
【问题描述】:

我有一个列表列表,例如 ll

ll <- list(a = list(data.frame(c = 1, d = 2), data.frame(h = 3, j = 4)), b = list(data.frame(c = 5, d = 6), data.frame(h = 7, j = 9)))

我想在每个最终列表中添加一个变量 grp。此变量 (grp) 必须包含每个列表的名称/值。因此,新的列表列表可能类似于 ls

ls <- list(a = list(data.frame(c = 1, d = 2, grp = 1), data.frame(h = 3, j = 4, grp = 2)), b = list(data.frame(c = 5, d = 6, grp = 1), data.frame(h = 7, j = 9, grp = 2)))

注意grp 可能不遵循从 1:n 开始的序列。我寻找的方法可能类似于以下bind_rows(df, .id = 'grp')唯一的一点是,在这种情况下,我不想进行行绑定(至少不是这种方式,而是另一种方式Unlist LAST level of a list in R

有什么线索吗?

【问题讨论】:

    标签: r list dplyr


    【解决方案1】:

    您可以使用lapply 简单地循环通过关卡

    setNames( lapply( 1:length(ll), function(x) lapply( 1:length(ll[[x]]), 
      function(y) cbind(ll[[x]][[y]],grp=y ) ) ), names(ll) )
    $a
    $a[[1]]
      c d grp
    1 1 2   1
    
    $a[[2]]
      h j grp
    1 3 4   2
    
    
    $b
    $b[[1]]
      c d grp
    1 5 6   1
    
    $b[[2]]
      h j grp
    1 7 9   2
    

    【讨论】:

    • 它可能不遵循从 1:n 开始的序列。我寻找的方法可能类似于以下bind_rows(df, .id = 'grp')。唯一的一点是,在这种情况下,我不想进行行绑定(至少不是以这种方式,而是以另一种方式stackoverflow.com/questions/70205748/…
    • @vog 您可以将其放在问题中。这是任何潜在答案的关键信息。
    • 当然!问题已编辑。谢谢
    【解决方案2】:

    从帖子看来,组是为每个嵌套列表迭代定义的。我们可以使用seq_along 创建组,并将其应用于列表ll 的每个元素。
    base R

    lapply(ll, \(.){
      Map(function(i, n) {n$grp = i ; n}, seq_along(.), .)
    })
    $a
    $a[[1]]
      c d grp
    1 1 2   1
    $a[[2]]
      h j grp
    1 3 4   2
    $b
    $b[[1]]
      c d grp
    1 5 6   1
    $b[[2]]
      h j grp
    1 7 9   2
    

    咕噜声

    map(ll, ~imap(.x, ~{.x$grp <- .y ; .x}))
    

    对于纯粹使用lapplymapplypurrr::map 的类似方法,请参阅this SO post。在这种方法中,与预期结果的唯一区别是向量的类,integer 而不是numeric,请参阅waldo::compare(ls, ll)

    【讨论】:

    • 它可能不遵循从 1:n 开始的序列。我寻找的方法可能类似于以下bind_rows(df, .id = 'grp')。唯一的一点是,在这种情况下,我不想进行行绑定(至少不是以这种方式,而是以另一种方式stackoverflow.com/questions/70205748/…
    • @vog 请更新您在原始帖子中的预期输出以反映您的要求(边缘案例说明问题) - 我不清楚grp 变量的标准是什么。无法提供可能的具体解决方案或方法。 bind_rows ... 绑定行,在原帖的预期输出ls 中未显示。
    • 问题已编辑。谢谢!
    猜你喜欢
    • 2013-05-30
    • 2018-06-28
    • 2021-02-12
    • 2014-07-25
    • 1970-01-01
    • 1970-01-01
    • 2013-01-25
    • 2021-11-29
    • 1970-01-01
    相关资源
    最近更新 更多