2015-09-28 74 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數據幀)?請嘗試更正或修改您的最小示例以準確反映您的問題。 –

相關問題