我们假设我有一个名为#old_list will be a list of length 10
#Create vectors for the dfs (there's probably a concise way to do this).
old_list<-list(rnorm(10),rnorm(10),rnorm(10),rnorm(10),rnorm(10),rnorm(10),
rnorm(10),rnorm(10),rnorm(10),rnorm(10))
#Turn old_list into a df; add a second column
library('dplyr')
old_list<-lapply(old_list,function(x) as.data.frame(x)%>%mutate(mu=1))
的数据框列表:
old_list
好的,现在 [[1]]
x mu
1 -0.47734743 1
2 0.28986887 1
3 0.02933248 1
4 -2.15761840 1
5 0.32944305 1
6 0.33237442 1
7 -0.48621491 1
8 -0.61504793 1
9 -1.45353709 1
10 -1.22628027 1
[[2]]
x mu
1 0.10329026 1
2 -0.43502662 1
3 0.87865194 1
4 -0.37628634 1
5 0.06234334 1
6 0.35441583 1
7 0.46176186 1
8 1.98786158 1
9 1.81183387 1
10 2.18143130 1 .... up to the 10th element
看起来像这样:
old_list
我想将new_list
中的每个第n个df分组到名为new_list
的新列表中。让我们说我想分组每秒df。 new_list<-list()
for (i in 1:seq(1,length(old_list),2)){
new_list[[i]]<-list(old_list[i:i+1])
}
应该有一个长度为5的列表,其中每个元素应该包含2个dfs。我尝试过这样的代码:
old_list
但是,这并没有组合#39;第1和第2,第3和第4,第5和第6 ......来自new_list
的dfs,就像我一样。有什么提示吗?
这是list(c(old_list[1],old_list[2]))
[[1]]
[[1]][[1]]
x mu
1 0.56877414 1
2 -2.35897500 1
3 1.16982547 1
4 -0.36609697 1
5 0.53758988 1
6 -1.05709000 1
7 -1.15997033 1
8 -0.07746139 1
9 -0.55179839 1
10 -0.11192844 1
[[1]][[2]]
x mu
1 0.34540644 1
2 -0.14567340 1
3 -0.56627562 1
4 0.22785077 1
5 -1.73692747 1
6 -1.03707293 1
7 -0.32093204 1
8 0.09449727 1
9 0.41419075 1
10 -0.17093046 1
的第一个元素应该是这样的(我没有设置种子,所以忽略rnorm(10)的不同值:
http://localhost:8081/swagger-ui.html
答案 0 :(得分:2)
如果我们需要根据&#39; n&#39;拆分list
和嵌套元素,我们使用gl
创建一个分组变量,split
向上#39; old_list&#39;并将其转换为tibble
library(tidyverse)
n <- 2
map2(list(old_list), length(old_list),
~split(.x, as.integer(gl(.y, n, .y)))) %>%
modify_depth(3, ~tibble(x = ., mu = 1))
或者可能是这个
n <- 2
res <- lapply(split(old_list, as.integer(gl(length(old_list), n,
length(old_list)))), function(x)
lapply(x, function(y) data.frame(x= y, mu = 1)))
res[1]
#$`1`
#$`1`[[1]]
# x mu
#1 1.11696564 1
#2 -0.32362765 1
#3 0.07355866 1
#4 0.97178378 1
#5 0.55000016 1
#6 0.34958254 1
#7 1.32894403 1
#8 -1.02388909 1
#9 0.48285111 1
#10 -0.55077723 1
#$`1`[[2]]
# x mu
#1 -0.4506403 1
#2 0.8701737 1
#3 3.3360928 1
#4 1.4608549 1
#5 1.1038983 1
#6 2.3979434 1
#7 0.1652383 1
#8 0.2294786 1
#9 0.2031739 1
#10 -0.4322401 1
答案 1 :(得分:2)
这有用吗?
n=2;
starts <- seq(1,length(old_list),n)
ends <- unique(c(seq(n,length(old_list),n),length(old_list)))
res <- Map(function(x,y){old_list[x:y]},starts,ends)
length(res) # 6
lengths(res) # [1] 2 2 2 2 2 1