从多个CSV文件打印处理过的数据

时间:2017-08-26 13:22:06

标签: r excel csv

我想处理包含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)
}

1 个答案:

答案 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)按行绑定所有单个列表。当然,对于每个列表项,列必须相同。