基于列表中r和rbind文件中的值在列表中创建组

基于列表中r和rbind文件中的值在列表中创建组,r,list,R,List,请参阅下面列表的一部分。该列表的范围实际上从19800101到20161231。首先,我想根据年份创建组,即将元素19800101-19801231放在一个名为1980的组中,以此类推。然后,我会将每组中的小文件rbind为一个大文件,比如rbind19800101到19801231,作为单个文件 有什么想法吗?谢谢 [1] "19800101.csv" "19800102.csv" "19800103.csv" "19800104.csv" "19800105.csv" "1980010

请参阅下面列表的一部分。该列表的范围实际上从19800101到20161231。首先,我想根据年份创建组,即将元素19800101-19801231放在一个名为1980的组中,以此类推。然后,我会将每组中的小文件rbind为一个大文件,比如rbind19800101到19801231,作为单个文件

有什么想法吗?谢谢

   [1] "19800101.csv" "19800102.csv" "19800103.csv" "19800104.csv" "19800105.csv" "19800106.csv" "19800107.csv"
   [8] "19800108.csv" "19800109.csv" "19800110.csv" "19800111.csv" "19800112.csv" "19800113.csv" "19800114.csv"
  [15] "19800115.csv" "19800116.csv" "19800117.csv" "19800118.csv" "19800119.csv" "19800120.csv" "19800121.csv"
  [22] "19800122.csv" "19800123.csv" "19800124.csv" "19800125.csv" "19800126.csv" "19800127.csv" "19800128.csv"
  [29] "19800129.csv" "19800130.csv" "19800131.csv" "19800201.csv" "19800202.csv" "19800203.csv" "19800204.csv"
  [36] "19800205.csv" "19800206.csv" "19800207.csv" "19800208.csv" "19800209.csv" "19800210.csv" "19800211.csv"
  [43] "19800212.csv" "19800213.csv" "19800214.csv" "19800215.csv" "19800216.csv" "19800217.csv" "19800218.csv"
  [50] "19800219.csv" "19800220.csv" "19800221.csv" "19800222.csv" "19800223.csv" "19800224.csv" "19800225.csv"
  [57] "19800226.csv" "19800227.csv" "19800228.csv" "19800229.csv" "19800301.csv" "19800302.csv" "19800303.csv"
  [64] "19800304.csv" "19800305.csv" "19800306.csv" "19800307.csv" "19800308.csv" "19800309.csv" "19800310.csv"
  [71] "19800311.csv" "19800312.csv" "19800313.csv" "19800314.csv" "19800315.csv" "19800316.csv" "19800317.csv"
  [78] "19800318.csv" "19800319.csv" "19800320.csv" "19800321.csv" "19800322.csv" "19800323.csv" "19800324.csv"
  [85] "19800325.csv" "19800326.csv" "19800327.csv" "19800328.csv" "19800329.csv" "19800330.csv" "19800331.csv"

我们可以通过使用
substr
拆分为
向量的
列表

lst1 <- split(v1, as.integer(substr(v1, 1, 4)))

然后,我们可以阅读
列表
rbind
数据集

lst2 <- lapply(lst1, function(x) do.call(rbind, lapply(x, read.csv)))

或使用
tidyverse

library(purrr)
library(readr)
library(dplyr)
lst2 <- map(lst1, ~ map_dfr(.x, read_csv))
库(purrr)
图书馆(readr)
图书馆(dplyr)

lst2为什么需要
作为.integer
?我认为即使不使用,它也能很好地工作it@ThomasIsCoding只需将
列表
元素按数字顺序排列即可。还有一个问题,我怎样才能访问新分组列表中的元素,比如19800101。@ThomasCoding我想你可以发布一个解决方案,因为它有更多compact@YabinDa您可以使用
grep
或使用
=
提取该元素,即
grep(“19800101”,lst1[[“1980”]],value=TRUE)
是。没错。我担心的是,在rbinding之后,每个文件都太大,无法放入列表中。我们可以在每个小组(每年)结束后编写_csv吗。
library(readr)
for(nm in names(lst1)) {
      tmp <- data.frame()
      for(i in seq_along(lst1[[nm]]))  {
             tmp <- rbind(tmp, read_csv(lst1[[nm]][i]))
        }
       write_csv(tmp, path = paste0(nm, ".csv"))
       rm(tmp)
       }
library(purrr)
library(readr)
library(dplyr)
lst2 <- map(lst1, ~ map_dfr(.x, read_csv))
df1 <- data.frame(v1)
df1$grp <- substr(df1$v1, 1,  4)