根据列中的值拆分csv,然后按行合并/绑定输出
问题描述:
我有一个包含4列(YY,MM,DD,RR)的csv文件。这里的样本数据:根据列中的值拆分csv,然后按行合并/绑定输出
目前的格式有9861行和4个colums像这样(每日从数据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
}
鉴于您在三列有个约会和一些类型的测量,蔓延到宽形式真的不明智的。此外,目前还不清楚你如何重塑形状,因为你没有一个ID变量来变成标题。 – alistaire
@alistaire。我试图创建一个像这样的虚拟列:dat $ test ichabod
好吧,'RR'每行只有一个值,所以你的列只有一个非广泛形式的'''每列值。因此,为什么这不是一个有用的转变; 9681 * 4!= 27 * 9862. – alistaire