R 如何使用嵌套列表进行循环?
下面是一个具有三个级别的嵌套列表示例(带有虚拟编号):R 如何使用嵌套列表进行循环?,r,list,for-loop,nested,iteration,R,List,For Loop,Nested,Iteration,下面是一个具有三个级别的嵌套列表示例(带有虚拟编号): mylist <- list("A" = list("A1" = list("1", "2", "3"), "A2" = list("10", "20", "30")),
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")))
下面是接收输出的潜在数据帧结构
df <- data.frame(First_level = character(),
Second_level = character(),
Last_value = integer())
df我们可以使用rrapply
和melt
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
使用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
库(tidyverse)
地图(mylist,~map(.x,tail,1))%>%
取消列表()%>%
as.list()%>%
as_tible()%>%
pivot_更长(cols=everything())%>%
分离(col=“name”,sep=“\\.”为=c(“第一级”,“第二级”))
#一个tibble:4x3
第一级第二级值
1 A A1 3
2 A A2 30
3 B B1 33
4 B B2 330
太棒了!我不知道这个包裹。感谢您快速给出答案,并指出我在for循环中的错误!明亮的谢谢你迅速的回答!
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
out <- list()
for(i in seq_along(mylist)) {
for(j in seq_along(mylist[[i]])) {
out <- c(out, tail(mylist[[i]][[j]], 1))
}
}
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