2015-09-28 73 views
0

我想在这里创建一个更好的示例,假设我有文件mtcars,并且我用它做了什么就是将它的每一行导出到独立文件中并放置它们成空目录,因为这样的:在R中构建一个循环来扫描目录中的所有文件

for(i in 1:nrow(mtcars)) 
write.table(mtcars[i,], file=paste(“mtcars”, as.character(i), ".txt", 
sep=""), row.names=FALSE, sep="\t") 

我想要做的是建立一个循环,这样我可以扫描一个文件夹,其中包括所有的行和列名,并创建一个新的数据帧。

这是我到目前为止,我认为它只做列而不是行。

myfiles<-list.files() 
for(file in mayflies){ 
if (file=="myrows.txt"){ 
myrows<-read.table(file, header=TRUE, sep="\t") 
} 
else{ 
tdataset<-read.table(file, header=TRUE, sep="\t") 
mydataset<-cbind(mydataset, tdataset) 
rm(tdataset) 
} 
} 
} 
row.names(meditates)<-myrows 

我怎样才能让我在上面的代码的结果,使一个文件夹,就把它扫描所有的行和列,并最终创建第一套代码上面列出了新的数据帧?如果你能解释一些对我来说非常有用的逻辑。

回答

0

我不完全确定你在问什么---你想重新创建你的原始data.frame

使用您的小例子:

for (i in 1:nrow(mtcars)) 
    write.table(mtcars[i,], file=paste("mtcars", as.character(i), ".txt", sep=""), row.names=FALSE, sep="\t") 

将下面的代码重构mtcars

files <- list.files(pattern = ".txt$")   # List all .txt files 
rows <- lapply(files, read.table, header = TRUE) # Read the files into list 
res <- do.call(rbind, rows)      # combine the data.frame 
head(res) 
# mpg cyl disp hp drat wt qsec vs am gear carb 
#1 21.0 6 160.0 110 3.90 2.62 16.46 0 1 4 4 
#2 19.2 6 167.6 123 3.92 3.44 18.30 1 0 4 4 
#3 17.8 6 167.6 123 3.92 3.44 18.90 1 0 4 4 
#4 16.4 8 275.8 180 3.07 4.07 17.40 0 0 3 3 
#5 17.3 8 275.8 180 3.07 3.73 17.60 0 0 3 3 
#6 15.2 8 275.8 180 3.07 3.78 18.00 0 0 3 3 

这是你想要的吗?如果不是,请解释你想要的输出。

EDIT:作为一个循环:

files <- list.files(pattern = ".txt$")   # List all .txt files 
res <- NULL 
for (file in files) { 
    row <- read.table(file, header = TRUE) 
    res <- rbind(res, row) 
} 
head(res) 
# mpg cyl disp hp drat wt qsec vs am gear carb 
# 1 21.0 6 160.0 110 3.90 2.62 16.46 0 1 4 4 
# 2 19.2 6 167.6 123 3.92 3.44 18.30 1 0 4 4 
# 3 17.8 6 167.6 123 3.92 3.44 18.90 1 0 4 4 
# 4 16.4 8 275.8 180 3.07 4.07 17.40 0 0 3 3 
# 5 17.3 8 275.8 180 3.07 3.73 17.60 0 0 3 3 
# 6 15.2 8 275.8 180 3.07 3.78 18.00 0 0 3 3 
+0

很抱歉的混乱。在我的原始文章的底部代码中,我相信我所做的是将所有行导出到空目录中。从那里我想要做的是建立一个循环,以便我可以扫描一个文件夹,其中包括所有行和列名称,并创建一个新的数据框(这是我的尝试与上面的代码)。我认为我的当前代码的问题是,它只适用于列,但我想获得列和行。 – cambelot

+0

我重新排列了段落。希望这可以帮助。 – cambelot

+0

我不明白这是如何与行和列同时工作。然后,您是否在每个文件中都有单个数据(即单个条目或1个1数据帧)?请尝试更正或修改您的最小示例以准确反映您的问题。 –

相关问题