如何从几个xls文件构建数据框?

时间:2013-04-10 14:00:33

标签: r loops dataframe xls

我正在尝试从我下载的几个xls表中构建一个数据框:

states <- c("A","B","C","D")

for(i in states){
download.file(paste("http://www.web.com/state=",i,".xyz",sep=""),paste("temp",i,".xls",sep=""),mode = "wb")              
    }

哪个工作正常。但我遇到的问题是,我想用所有这些excel文件构建一个数据框(我可以使用gdata的{​​{1}}单独阅读,而且我需要插入一个列数据框告诉我数据来自何处,即来自A,B,C或D.

例如,我在循环中插入这些

read.xls

它工作正常,但我不知道在这一步之后该怎么做(或者如果我可以使它更简单)。我接下来要做的就是在循环中将state <- read.xls(paste("temp",i,".xls",sep=""),sheet=1, header = F, skip = 1, perl="C:/Perl/perl/bin/perl.exe",row.names=NULL) state$UF <- data.frame(state,paste(i,sep="")) 重命名为state等,但我不知道该怎么做。重命名单个数据帧后,我会使用stateA, stateB将它们组合在一起。

你有什么想法吗?

2 个答案:

答案 0 :(得分:2)

gdata的read.xls可以在一个read.xls电话中通过互联网下载和阅读文件:

urls <- sprintf("http://www.web.com/state=%s.xyz", states)
L <- lapply(urls, read.xls, ...other.read.xls.arguments...)
names(L) <- states

以上产生了一个数据帧列表L。如果所有数据帧具有相同的形式,则列表可以组合成单个数据帧DF,如下所示:

DF <- do.call(rbind, L)

DF的行名将指示每行来自哪个州。可选地,可以像这样添加新列(其中sub删除行名称的行号部分):

DF$state <- sub("\\.\\d*$", "", rownames(DF))
rownames(DF) <- NULL

答案 1 :(得分:1)

在R中运行良好的一般策略是将您的资料加载到列表中:

state_list = lapply(list.files(pattern = "xls"), read.xls, sheet = 1, etc)
big_df = do.call("rbind", state_list)

甚至更短时间使用plyr

library(plyr)
big_df = ldply(list.files(pattern = "xls"), read.xls, sheet = 1, etc)

请注意,此处没有明确的for循环,并且代码非常短且非常简单。