我有一个数据列表,我想根据一个列来分割,在这种情况下是cluster列。
d1 <- data.frame(y1=c(1,2,3), cluster=c(1,2,6))
d2 <- data.frame(y1=c(3,2,1), cluster=c(6,2,4))
my.list <- list(d1, d2)使用lapply(my.list , function(x) split(x, x$cluster)),将拆分的数据作为子列表返回。是否有可能拆分数据文件并创建新的数据文件作为单独的列表条目?
所需的输出如下所示:
my.list2 <- list(df1_cl1 , df1_cl2m df1_cl6, df2_cl6, df2_cl2, df2_cl4 )发布于 2022-02-25 11:47:37
第一步是正确的,要以所需的结构获取数据,可以使用unlist将列表输出与recursive = FALSE联系起来。
my.list2 <- unlist(lapply(my.list , function(x)
split(x, x$cluster)), recursive = FALSE)
my.list2
#$`1`
# y1 cluster
#1 1 1
#$`2`
# y1 cluster
#2 2 2
#$`6`
# y1 cluster
#3 3 6
#$`2`
# y1 cluster
#2 2 2
#$`4`
# y1 cluster
#3 1 4
#$`6`
# y1 cluster
#1 3 6
length(my.list2)
#[1] 6您可以使用unname(my.list2)删除列表的名称。
发布于 2022-02-25 12:34:21
基于dplyr:group_split和purrr::map的另一种可能的解决方案
library(tidyverse)
map(my.list, ~ group_split(.x, .x$cluster, .keep = F)) %>% flatten
#> [[1]]
#> # A tibble: 1 × 2
#> y1 cluster
#> <dbl> <dbl>
#> 1 1 1
#>
#> [[2]]
#> # A tibble: 1 × 2
#> y1 cluster
#> <dbl> <dbl>
#> 1 2 2
#>
#> [[3]]
#> # A tibble: 1 × 2
#> y1 cluster
#> <dbl> <dbl>
#> 1 3 6
#>
#> [[4]]
#> # A tibble: 1 × 2
#> y1 cluster
#> <dbl> <dbl>
#> 1 2 2
#>
#> [[5]]
#> # A tibble: 1 × 2
#> y1 cluster
#> <dbl> <dbl>
#> 1 1 4
#>
#> [[6]]
#> # A tibble: 1 × 2
#> y1 cluster
#> <dbl> <dbl>
#> 1 3 6https://stackoverflow.com/questions/71265367
复制相似问题