簡體   English   中英

如何為年月序列創建和保存子集數據框

[英]How to create and save subset dataframes for sequence of year-month

我想從給定年月的 dataframe 觀察中過濾,然后將其另存為單獨的 dataframe 並用相應的年月命名。

如果有人能提出比下面更有效的代碼,我將不勝感激。 此外,此代碼未正確過濾觀察結果。

data <- data.frame(year  = c(rep(2012,12),rep(2013,12),rep(2014,12),rep(2015,12),rep(2016,12)),
                   month = rep(1:12,5),
                   info = seq(60)*100)
years <- 2012:2016
months <- 1:12
for(year in years){
  for(month in months){
    
    data_sel <- data %>%
      filter(year==year & month==month)
    
    if(month<10){
      month_alt <- paste0("0",month) # months 1-9 should show up as 01-09
    }
    
    Newname <- paste0(year,month_alt,'_','data_sel')
    assign(Newname, data_sel)
  }
}

我希望得到的 output 如下(包含來自給定年月數據的單獨對象):

> ls()
 [1] "201201_data_sel" "201202_data_sel" "201203_data_sel" "201204_data_sel"
 [5] "201205_data_sel" "201206_data_sel" "201207_data_sel" "201208_data_sel"
 [9] "201209_data_sel" "201301_data_sel" "201302_data_sel" "201303_data_sel"
[13] "201304_data_sel" "201305_data_sel" "201306_data_sel" "201307_data_sel"
[17] "201308_data_sel" "201309_data_sel" "201401_data_sel" "201402_data_sel"
[21] "201403_data_sel" "201404_data_sel" "201405_data_sel" "201406_data_sel"
[25] "201407_data_sel" "201408_data_sel" "201409_data_sel" "201501_data_sel"
[29] "201502_data_sel" "201503_data_sel" "201504_data_sel" "201505_data_sel"
[33] "201506_data_sel" "201507_data_sel" "201508_data_sel" "201509_data_sel"
[37] "201601_data_sel" "201602_data_sel" "201603_data_sel" "201604_data_sel"
[41] "201605_data_sel" "201606_data_sel" "201607_data_sel" "201608_data_sel"
[45] "201609_data_sel" "data"            "data_sel"        "month"          
[49] "month_alt"       "months"          "Newname"         "year"           
[53] "years"

你可以這樣做:

library(dplyr)

g <- data %>% 
  mutate(month = sprintf("%02d", month)) %>% 
  group_by(year, month) 

setNames(group_split(g), with(group_keys(g), paste0("data_sel_", year, month))) %>% 
  list2env(envir = .GlobalEnv)

R中不允許使用數字啟動 object 名稱,因此在paste0中“data_sel_”是第一個。

如評論中所述,最好不要將pipe 到list2env並將 output 存儲為具有命名元素的列表。

暫無
暫無

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

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