如何用最少命令按出生年份将大型数据集拆分为小数据集?
问题
现有如下格式的数据集(R数据框):
ID year birth_year outcome 1 10021 2015 1960 1 2 10021 2016 1960 1 3 10021 2017 1960 1 4 10021 2018 1960 0 5 10021 2019 1960 0 6 10022 2015 1968 1 7 10022 2016 1968 0 8 10022 2017 1968 0 9 10022 2018 1968 0 10 10022 2019 1968 0 11 10023 2015 1968 1 12 10023 2016 1968 1 13 10023 2017 1968 1 14 10023 2018 1968 1 15 10023 2019 1968 1 16 10024 2015 1961 0 17 10024 2016 1961 0 18 10024 2017 1961 0 19 10024 2018 1961 1 20 10024 2019 1961 1
需要按birth_year列拆分数据集,分别生成名为year1960、year1961、year1968的数据框,最终效果如下:
> year1960 ID year birth_year outcome 1 10021 2015 1960 1 2 10021 2016 1960 1 3 10021 2017 1960 1 4 10021 2018 1960 0 5 10021 2019 1960 0 > year1961 1 10024 2015 1961 0 2 10024 2016 1961 0 3 10024 2017 1961 0 4 10024 2018 1961 1 5 10024 2019 1961 1 > year1968 1 10022 2015 1968 1 2 10022 2016 1968 0 3 10022 2017 1968 0 4 10022 2018 1968 0 5 10022 2019 1968 0 6 10023 2015 1968 1 7 10023 2016 1968 1 8 10023 2017 1968 1 9 10023 2018 1968 1 10 10023 2019 1968 1
如何用最少步骤实现?
解决方案
方法1:基础R原生函数(无需额外包)
一行代码完成拆分并生成指定名称的数据框:
list2env(split(df, paste0("year", df$birth_year)), .GlobalEnv)
- 说明:
split()按拼接后的year+出生年份规则拆分数据集为列表;list2env()将列表中的每个元素转为全局环境中的独立数据框。
方法2:tidyverse工具链(需加载dplyr和purrr)
如果习惯tidyverse语法,同样一行核心代码完成:
library(dplyr) library(purrr) df %>% group_split(birth_year) %>% set_names(paste0("year", unique(df$birth_year))) %>% list2env(.GlobalEnv)
- 说明:
group_split()按出生年份拆分数据框为列表;set_names()给列表元素赋予指定名称;最后通过list2env()存入全局环境。
内容的提问来源于stack exchange,提问作者Ludwig Gershwin
相关产品推荐
相关产品推荐

