0

我有一个大型数据框,其中包含我正在处理的项目的所有数据,并且我正在尝试生成一系列较小的数据框,其中包含与两列匹配的数据。因此,例如对于下面的示例数据,我需要编写一段脚本,为年份和殖民地相同的数据点生成一系列数据帧(例如年份 = 2012,殖民地 = A;年份 = 2012,殖民地 = B )。

year <- c(2012, 2012, 2012, 2012, 2013, 2013, 2013, 2013, 2014, 2014, 2014, 2014)
colony <- c ('A', 'A', 'B', 'B', 'A', 'A', 'B', 'B', 'A', 'A', 'B', 'B')
measurement <- c(4,6,1,4,8,2,1,5,4,1,3,8)
data <- data.frame(year, colony, measurement) 

目前我能做的最好的就是单独制作每个:

A2012 <- filter(data, colony == 'A' & year == 2012)
B2012 <- filter(data, colony == 'B' & year == 2013)

等等。但是,要生成大约 80 个数据帧,因此如果可能的话,最好将其自动化。有谁知道我可以更快地做到这一点的方法?

4

1 回答 1

0

您可以组合函数group_bygroup_splitdplyr 将数据帧拆分为较小的数据帧列表:

data %>% 
  tibble() %>%
  group_by(colony,year) %>%
  group_split()

## <list_of<
##   tbl_df<
##     year       : double
##     colony     : character
##     measurement: double
##   >
## >[6]>
## [[1]]
## # A tibble: 2 x 3
##    year colony measurement
##   <dbl> <chr>        <dbl>
## 1  2012 A                4
## 2  2012 A                6
## 
## [[2]]
## # A tibble: 2 x 3
##    year colony measurement
##   <dbl> <chr>        <dbl>
## 1  2013 A                8
## 2  2013 A                2
##
## (...)

您可能还想查看函数族group_map,它允许您将函数应用于每个组,就好像它们是单独的数据帧一样。

于 2021-12-03T13:34:21.077 回答