根据列中的值拆分 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 文件。这是示例数据:
当前格式有 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
}
我有一个包含 4 列(YY、MM、DD、RR)的 csv 文件。这是示例数据:
当前格式有 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
}