Reputation: 796
I have this example where I split the list into two categories:
list_data1 <- data.frame(date=c("Jan", "Feb", "Mar"), X0=c(3, 9, 5, 1, -2, 8),
X1=c(3, 9, 5, 1, -2, 8), mod=c("gg", "gg", "gg"))
list_data2 <- data.frame(date=c("Jan", "Feb", "Mar"), X0=c(3, 9, 5, 1, -2, 8),
X1=c(3, 9, 5, 1, -2, 8), mod=c("m", "m", "m"))
list_data3 <- data.frame(date=c("Jan", "Feb", "Mar"), X0=c(3, 9, 5, 1, -2, 8),
X1=c(3, 9, 5, 1, -2, 8), mod=c("d", "d", "d"))
list_data4 <- data.frame(date=c("Jan", "Feb", "Mar"), X0=c(1, 2, 5, 1, -2, 8),
X1=c(3, 9, 5, 1, -2, 8), mod=c("b", "b", "b"))
list_data5 <- data.frame(date=c("Jan", "Feb", "Mar"), X0=c(3, 1, 5, 1, -2, 8),
X1=c(1, 2, 3, 1, -2, 8), mod=c("f", "f", "f"))
merged.list <- list(list_data1, list_data2,list_data3,list_data4,list_data5)
library(dplyr)
library(purrr)
rest=bind_rows(merged.list) %>%
group_split(mod %in% c('b', 'f'), .keep = FALSE) %>%
map(~.x %>% group_by(date) %>% summarise(across(X0:X1, mean, na.rm = TRUE)))
I would like to include in rest all data not splited, as rest [[3]]
[[1]] and [[2]] become [[3]]
expected output for the first part
bind_rows(merged.list) %>% group_split(mod %in% c('b', 'f'), .keep = FALSE)
<list_of<
tbl_df<
date: character
X0 : double
X1 : double
mod : character
>
[[1]]
A tibble: 18 x 4
date X0 X1 mod
<chr> <dbl> <dbl> <chr>
1 Jan 3 3 gg
2 Feb 9 9 gg
3 Mar 5 5 gg
4 Jan 1 1 gg
5 Feb -2 -2 gg
6 Mar 8 8 gg
7 Jan 3 3 m
8 Feb 9 9 m
9 Mar 5 5 m
10 Jan 1 1 m
11 Feb -2 -2 m
12 Mar 8 8 m
13 Jan 3 3 d
14 Feb 9 9 d
15 Mar 5 5 d
16 Jan 1 1 d
17 Feb -2 -2 d
18 Mar 8 8 d
[[2]]
A tibble: 12 x 4
date X0 X1 mod
<chr> <dbl> <dbl> <chr>
1 Jan 1 3 b
2 Feb 2 9 b
3 Mar 5 5 b
4 Jan 1 1 b
5 Feb -2 -2 b
6 Mar 8 8 b
7 Jan 3 1 f
8 Feb 1 2 f
9 Mar 5 3 f
10 Jan 1 1 f
11 Feb -2 -2 f
12 Mar 8 8 f
[[3]]
A tibble: 30 x 4
date X0 X1 mod
<chr> <dbl> <dbl> <chr>
1 Jan 1 3 b
2 Feb 2 9 b
3 Mar 5 5 b
4 Jan 1 1 b
5 Feb -2 -2 b
6 Mar 8 8 b
7 Jan 3 1 f
8 Feb 1 2 f
9 Mar 5 3 f
10 Jan 1 1 f
11 Feb -2 -2 f
12 Mar 8 8 f
1 Jan 3 3 gg
2 Feb 9 9 gg
3 Mar 5 5 gg
4 Jan 1 1 gg
5 Feb -2 -2 gg
6 Mar 8 8 gg
7 Jan 3 3 m
8 Feb 9 9 m
9 Mar 5 5 m
10 Jan 1 1 m
11 Feb -2 -2 m
12 Mar 8 8 m
13 Jan 3 3 d
14 Feb 9 9 d
15 Mar 5 5 d
16 Jan 1 1 d
17 Feb -2 -2 d
18 Mar 8 8 d
Upvotes: 1
Views: 114
Reputation: 886938
IN base R
, we can do
fulldat <- do.call(rbind, merged.list)
c(split(fulldat, fulldat$mod %in% c('b', 'f')), list(fulldat))
Upvotes: 1
Reputation: 388807
You can try this :
library(dplyr)
data <- bind_rows(merged.list)
data1 <- data %>% group_split(mod %in% c('b', 'f'), .keep = FALSE)
class(data1) <- 'list'
result <- c(data1, list(data))
result
Upvotes: 0