【问题标题】:How to save output of a loop over a nested list如何在嵌套列表上保存循环的输出
【发布时间】:2019-10-23 12:25:01
【问题描述】:

我有一个嵌套数据框列表:

set.seed(1)
S1 = data.frame(replicate(2,sample(0:130,30,rep=TRUE)))
S2 = data.frame(replicate(2,sample(0:130,34,rep=TRUE)))
S3 = data.frame(replicate(2,sample(0:130,21,rep=TRUE)))
S4 = data.frame(replicate(2,sample(0:130,26,rep=TRUE)))
df_list1 = list(S1 = S1, S2 = S2, S3 = S3, S4 = S4)

set.seed(2)
S1 = data.frame(replicate(2,sample(0:130,30,rep=TRUE)))
S2 = data.frame(replicate(2,sample(0:130,34,rep=TRUE)))
S3 = data.frame(replicate(2,sample(0:130,21,rep=TRUE)))
S4 = data.frame(replicate(2,sample(0:130,26,rep=TRUE)))
df_list2 = list(S1 = S1, S2 = S2, S3 = S3, S4 = S4)

set.seed(3)
S1 = data.frame(replicate(2,sample(0:130,30,rep=TRUE)))
S2 = data.frame(replicate(2,sample(0:130,34,rep=TRUE)))
S3 = data.frame(replicate(2,sample(0:130,21,rep=TRUE)))
S4 = data.frame(replicate(2,sample(0:130,26,rep=TRUE)))
df_list3 = list(S1 = S1, S2 = S2, S3 = S3, S4 = S4)

set.seed(4)
S1 = data.frame(replicate(2,sample(0:130,30,rep=TRUE)))
S2 = data.frame(replicate(2,sample(0:130,34,rep=TRUE)))
S3 = data.frame(replicate(2,sample(0:130,21,rep=TRUE)))
S4 = data.frame(replicate(2,sample(0:130,26,rep=TRUE)))
df_list4 = list(S1 = S1, S2 = S2, S3 = S3, S4 = S4)

df_list = list (df_list1, df_list2, df_list3, df_list4)
names(df_list) = c("AB_df", "BC_df", "DE_df", "FG_df")

我想通过循环提取每个数据帧的第一列并将其保存到列表中。我现在的问题是如何使循环正确保存。我必须使用哪个运行索引?我尝试了不同的版本,但没有任何效果。这是我的代码,我现在需要知道用什么来代替???

datalist = list()
for (a in 1:length(df_list)) {
  for (b in 1:length(df_list[[1]])) {
    datalist[[?????]] = df_list[[a]][[b]][1]}}

为了更清楚:作为输出,我想要一个包含所有 16 个数据帧的每一列的列表。所以 16 个列表条目。

【问题讨论】:

  • 请更准确地定义预期结果。你想要一个包含所有第一列的大小为 4*4 = 16 的列表吗?您是否希望它具有有意义的名称,以反映每个此类列的获取位置?
  • 嗨,是的!我想要一个包含 16 个条目的列表,1 个条目是每个数据帧的第一列,最好有一个名称来自哪里!

标签: r list loops dataframe


【解决方案1】:

purrr 在这里完美运行。

library(purrr)

datalist <-
  df_list %>% 
  # prepend top level names to dataframe names
  imap(~ set_names(.x, function(nms) {paste(.y, nms, sep = "-")})) %>% 
  flatten() %>% 
  map(1)

【讨论】:

  • 谢谢。这似乎是我想要的。我不明白最后一部分。 map(1) 有什么作用?如何将此列表保存到我的 gloval 环境中?
  • map(1) 提取它所应用到的列表的每个元素(在我们的例子中为 data.frame)的第一个元素(即第一列)。
  • 谢谢!这就是我想要的!
猜你喜欢
  • 2018-06-30
  • 2020-01-29
  • 2021-02-13
  • 1970-01-01
  • 1970-01-01
  • 2018-02-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多