我想处理包含29个工作表的Excel文件中的数据。 Excel文件细分为29个CSV文件。
我制作的代码给了我一个Excel文档,其中只有一行用于所有29个工作表。我需要为每个(已加载的)工作表打印摘要(最后是29行)。
for (i in 1:length(list.filenames))
{
list.data[[i]]<-read.csv(list.filenames[i])
cdata <- ddply(list.data[[i]], c("Year"), summarise, God.Padavine = sum(PRECIPITATION), N = length(PRECIPITATION), mean = mean(PRECIPITATION), sd = sd(PRECIPITATION), se = sd *100/mean)
cdata111 <- ddply(cdata, c(), summarise, God.Padavine1 = sum(God.Padavine)/70, N = length(God.Padavine), mean = mean(God.Padavine), sd = sd(God.Padavine), se = sd *100/mean)
write.xlsx(x = cdata111, file = "test.excelfile111.xlsx", sheetName = "TestSheet", row.names = FALSE)
}
答案 0 :(得分:0)
我有一个超级忙碌的一周,所以我现在只设法查看你的问题。希望这个答案仍然对你有用:
### 1. Create some example data
example_data=data.frame(Year=rep(1946:1947,each=12),MONTH_ID=rep(1:12,2),PRECIPITATION=round(runif(24,1,100)))
example_data2=data.frame(Year=rep(1948,12),MONTH_ID=1:12,PRECIPITATION=round(runif(12,1,100)))
example_data3=data.frame(Year=rep(1949:1951,each=12),MONTH_ID=rep(1:12,3),PRECIPITATION=round(runif(36,1,100)))
list.data=list(example_data,example_data2,example_data3)
### 2. Loop through the list of data
cdata=cdata111=list(1:2)
for (i in 1:length(list.data)){ # replaced list.filenames since I made sample data
#list.data[[i]]<-read.csv(list.filenames[i]) # Not used because I created sample data
cdata[[i]] <- ddply(list.data[[i]], c("Year"), summarise, God.Padavine = sum(PRECIPITATION), N = length(PRECIPITATION), mean = mean(PRECIPITATION), sd = sd(PRECIPITATION), se = sd *100/mean)
cdata111[[i]] <- ddply(cdata[[i]], c(), summarise, God.Padavine1 = sum(God.Padavine)/70, N = length(God.Padavine), mean = mean(God.Padavine), sd = sd(God.Padavine), se = sd *100/mean)
}
### 3. Write the results
input_summary<-do.call(rbind,cdata111)
yrly_summary<-do.call(rbind,cdata)
write.xlsx(input_summary, file = "Input_summary.xlsx", sheetName = "Input_summary", row.names = FALSE)
对于未来的项目,请注意您的代码存在两个问题:首先,您没有遍历cdata111
,其次您在循环中使用了write.xlsx
- 函数。特别是后者是不好的做法,因为它会大大减慢你的代码。如果您想要做这样的事情,请使用openxlsx
并在循环之后编写xlsx 。
如果将循环的所有结果存储在列表中,则可以使用do.call(rbind,mylist)
按行绑定所有单个列表。当然,对于每个列表项,列必须相同。