如何在嵌套列表中使用 for 循环?

如何解决如何在嵌套列表中使用 for 循环?

这是一个三层嵌套列表的例子(带有虚拟数字):

mylist <- list("A" = list("A1" = list("1","2","3"),"A2" = list("10","20","30")),"B" = list("B1" = list("11","22","33"),"B2" = list("110","220","330")))

我想将每个子列表(在较低级别)的最后一个元素提取一个数据帧中,以便更轻松地处理数据并进行进一步的计算。 输出看起来像这样:

> mylist
  First_level   Second_level   Last_value
> A             A1            3
> A             A2            30
> B             B1            33
> B             B2            330

这是接收输出的潜在数据帧结构。

df <- data.frame(First_level = character(),Second_level = character(),Last_value = integer())

我试过 for 循环:

for (i in length(mylist)){
  for (j in length(mylist[[i]])){
    df$last_element <- tail(mylist[[i]][[j]],1)
  }
}
df

但是我必须对嵌套列表太无知才能正确编写双 for 循环来实现此目的... 你能帮忙吗?

解决方法

我们可以将 rrapplymelt 一起使用

library(rrapply)
library(dplyr)
rrapply(mylist,how = 'melt') %>% 
    group_by(First_level = L1,Second_level = L2) %>% 
    summarise(Last_value = last(value),.groups = 'drop')
# A tibble: 4 x 3
# Groups:   First_level [2]
#  First_level Second_level Last_value
#  <chr>       <chr>        <chr>     
#1 A           A1           3         
#2 A           A2           30        
#3 B           B1           33        
#4 B           B2           330     

在 OP 的循环中,它循环遍历单个值,即 length 而不是 1:lengthseq_along

out <- list()
for(i in seq_along(mylist)) {
    for(j in seq_along(mylist[[i]])) {
        out <- c(out,tail(mylist[[i]][[j]],1))
    }
 }
,

使用 tidyverse 包:

library(tidyverse)

map(mylist,~map(.x,tail,1)) %>% 
  unlist() %>% 
  as.list() %>% 
  as_tibble() %>%
  pivot_longer(cols = everything()) %>% 
  separate(col = "name",sep = "\\.",into = c("first_level","second_level"))

# A tibble: 4 x 3
  first_level second_level value
  <chr>       <chr>        <chr>
1 A           A1           3    
2 A           A2           30   
3 B           B1           33   
4 B           B2           330 

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?