循环dplyr并创建多个数据框

凸轮

我有一个大型数据集,我想在其中使用dplyr和filter并选择数据以创建12个单独的数据框。

本质上,我只使用来自较大数据集的两列数据。第一列是“情节”,在这里我按“情节”数字和另一个第三栏中的另一个条件(“ pos_ID”)进行过滤。我想创建一个按图号(我尝试过plot==[i])和第三个条件过滤的循环,然后创建一个新的数据框。该循环将重复12次(因为绘图范围为1-12)。

这是我没有循环使用的代码(基于示例数据)

 p1_Germ <- data %>% #p1 stands for plot 1
   filter(plot==1, pos_ID<21) %>% 
   select(germ_bin)

这是我尝试合并循环的代码(基于示例数据)

for(i in seq_along(plot)) {
   data %>%
     group_by(plot[[i]], pos_ID<21) %>%
     select(germ_bin)
 }

这是一些样本数据

plot <- c(1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12)
germ_bin <- c(0,0,1,0,1,0,0,1,1,0,1,1,0,1,0,1,0,1,1,0,1,0,1,0)
pos_ID <- c(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24)
dataset <- data.frame(plot, germ_bin, pos_ID)
dataset

我的猜测是使用列表,但我对循环和列表不熟悉,无法在线找到解决方案。我需要创建12个数据框,因为我试图将它们分别转换为另一个函数的矩阵。任何帮助将不胜感激!

罗纳克·沙(Ronak Shah)

我们可以使用group_splitmapfilter基于标准得到dataframes的名单。

library(dplyr)
library(purrr)

dataset %>%
 group_split(plot) %>%
 map(. %>% filter(pos_ID < 21) %>% select(germ_bin))

#[[1]]
# A tibble: 2 x 1
#  germ_bin
#     <dbl>
#1        0
#2        0

#[[2]]
# A tibble: 2 x 1
#  germ_bin
#     <dbl>
#1        1
#2        0

#[[3]]
# A tibble: 2 x 1
#  germ_bin
#     <dbl>
#1        1
#2        0
#....

对于共享示例,如果要删除空组,可以filter

dataset %>%
  filter(pos_ID < 21) %>%
  group_split(plot) %>%
  map(. %>% select(germ_bin))

for循环尝试而言,您可以通过

unique_plot <- unique(dataset$plot)
plot_list <- list(length = length(unique_plot))

for(i in seq_along(unique_plot)) {
   plot_list[[i]] <- dataset %>%
        filter(plot == unique_plot[i], pos_ID<21) %>%
        select(germ_bin)
}

或者将其完全保留在基数R中

lapply(split(dataset, dataset$plot), function(x) 
             subset(x, pos_ID < 21, select = germ_bin, drop = FALSE))

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章