在 R 中添加一个包含每个 FINAL 列表(在列表列表中)名称的变量

Posted

技术标签:

【中文标题】在 R 中添加一个包含每个 FINAL 列表(在列表列表中)名称的变量【英文标题】:Add one variable containing the name of each FINAL list (in a list of lists) in R 【发布时间】: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)

有什么线索吗?

【问题讨论】:

【参考方案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')。唯一的一点是,在这种情况下,我不想进行行绑定(至少不是以这种方式,而是以另一种方式***.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')。唯一的一点是,在这种情况下,我不想进行行绑定(至少不是以这种方式,而是以另一种方式***.com/questions/70205748/…) @vog 请更新您在原始帖子中的预期输出以反映您的要求(边缘案例说明问题) - 我不清楚grp 变量的标准是什么。无法提供可能的具体解决方案或方法。 bind_rows ... 绑定行,在原帖的预期输出ls 中未显示。 问题已编辑。谢谢!

以上是关于在 R 中添加一个包含每个 FINAL 列表(在列表列表中)名称的变量的主要内容,如果未能解决你的问题,请参考以下文章

Telerik MVC Grid:如何在列中使用 DropDownList?

R:根据列表元素名称创建新的数据框变量

final关键字, 自动加载类

计算 PySpark SQL Join 中每个不同值在列中出现的次数

R语言将多个dataframe数据添加在列表(list)结构中并进行列表dataframe的索引:包含dataframe的列表包含dataframe的列表的索引

绘制R中每个列表列表的元素