簡體   English   中英

動態拆分和命名數據幀

[英]Dynamically Splitting and naming the dataframe

我有一個名為“貸款”的數據框,它包含所有信息,如客戶 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”,然后是每個行中的值。 要保存的數據幀的數量也是動態的

基本上我試圖自動化這個過程,因此拆分和數據幀的數量會自動拆分、命名和保存。

提前致謝

由於您要求自動化,請在創建list_of_dataframes后運行以下命令

temp <- unique(loan$yq)
for(i in 1:length(list_of_dataframes)) {
    assign(paste0("loan_",temp[i]),list_of_dataframes[[i]])
}

我最終建議您將數據保存在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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM