根据列中的值拆分 csv,然后 merge/bind 按行输出

Split a csv based on values in a column then merge/bind the output by row

我有一个包含 4 列(YY、MM、DD、RR)的 csv 文件。这是示例数据:

Link to data

当前格式有 9861 行和 4 列,如下所示(1981-2007 年的每日数据):

YY,MM,DD,RR
1981,1,1,0
1981,1,2,0
1981,1,3,-9999
1981,1,4,-9999
1981,1,5,0
1981,1,6,0
.....
.....
2007,1,31,-9999

我想每年拆分 csv 文件。输出应该是 27 个具有相同列数的 csv 文件。 例如,1981.csv 包含:

YY, MM, DD, RR
1981, 1, 1, 0.4
1981, 1, 2, 0
.....
.....
1981, 12, 31, 0.5

这是我的脚本:

dat <- read.csv("test_dat.csv", header = T, sep = ",")
spt1<-split(dat,dat$YY)
lapply(names(spt1), function(x){write.csv(spt1[[x]], file = paste0("output",x, sep = "",".csv"),row.names=F)})

我想按行绑定输出 csv 文件,这样输出将如下所示:

 YY,1,2,3,4,5,6,7,8,9,10,......,365
1981,val1,val2,.............,val365
...
...
2008,val1,val2,.............,val365

闰年应该有 366 天。

在 R 中可以轻松做到这一点吗?

如有任何帮助,我将不胜感激。

假设你有这样的数据框,你可以运行一个循环

YY <- seq(1981, 2007,1)     #Defining years
RR <- runif(27,0,30)        #Defining another random column, replace this with your respective columns

df <- data.frame(YY,RR)     #created data frame
df$YY <- as.factor(df$YY)   #ignore this step if your year column is already a factor

for (i in levels(df$YY)) {      #run a for loop for each year
  year <- i
  df.subset <- df[df$YY %in% year,]     #subset your data as per year
  write.csv(df.subset,file = paste(year,"csv",sep = "."))   #save the subset df in a new file with year as file name
}