我有一个名为“贷款”的数据框,其中包含客户ID,贷款金额,贷款期限等所有信息。
有一个名为“yq”的栏目,基本上是贷款支付日期的年份和季度
ID yq
1 2014 Q4
2 2014 Q4
3 2015 Q1
4 2015 Q2
5 2015 Q3
我想根据季度和年份拆分数据框,所以我自然而然地使用了以下内容:
list_of_dataframes <- split(loan,
with(loan, yq),
drop = TRUE)
但这导致我像这样对分割数据集进行硬编码:
loan_2014_q4 <- list_of_dataframes[[1]]
loan_2015_q1 <- list_of_dataframes[[2]]
有没有办法更好地做到这一点,比如数据框的名称是“loan”,后面是每行的值。此外,要保存的数据帧数量是动态的
基本上我正在尝试自动化该过程,因此分割和数据框的数量会自动分割,命名和保存。
提前致谢
答案 0 :(得分:2)
由于您要求自动执行,请在创建passenger stop;
list_of_dataframes
答案 1 :(得分:2)
我最终会建议您将数据保存在list
中(如果您使用的工具如“data.table”和“dplyr”,您甚至不需要列表,这些工具可为您提供极其灵活的子集选项)
但是,如果您确实需要单独的data.frame
,请尝试以下操作:
## Assume your data.frame is called "mydf"....
temp <- split(mydf, mydf$yq, drop = TRUE)
ls()
[1] "mydf" "temp"
temp
# $`2014 Q4`
# ID yq
# 1 1 2014 Q4
# 2 2 2014 Q4
#
# $`2015 Q1`
# ID yq
# 3 3 2015 Q1
#
# $`2015 Q2`
# ID yq
# 4 4 2015 Q2
#
# $`2015 Q3`
# ID yq
# 5 5 2015 Q3
现在,使用list2env
将每个列表项作为自己的对象放入全局环境中。首先修改列表的名称。
list2env(setNames(temp, sprintf("loan_%s", gsub("\\s+", "_", names(temp)))), .GlobalEnv)
# <environment: R_GlobalEnv>
ls()
# [1] "loan_2014_Q4" "loan_2015_Q1" "loan_2015_Q2" "loan_2015_Q3" "mydf" "temp"
loan_2014_Q4
# ID yq
# 1 1 2014 Q4
# 2 2 2014 Q4