基于列表中r和rbind文件中的值在列表中创建组
请参阅下面列表的一部分。该列表的范围实际上从19800101到20161231。首先,我想根据年份创建组,即将元素19800101-19801231放在一个名为1980的组中,以此类推。然后,我会将每组中的小文件rbind为一个大文件,比如rbind19800101到19801231,作为单个文件 有什么想法吗?谢谢基于列表中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
[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)