2017-10-09 16 views
0

我在一個文件夾中有多個文件。他們都有相同的佈局,我已經提取了他們想要的信息。循環播放一組標準化文件以收集信息並將其保存在不同的文件中

因此,現在,對於每個文件,我想寫一個.csv文件並將其命名爲原始輸入文件,並向其中添加「_output」。

但是,我不想爲每個文件手動重複此過程。我想循環它們。我在網上尋找幫助,發現了很多很棒的提示,其中包括很多內容。

這裏是我的嘗試:

#Set directory 
dir = setwd("D:/FRhData/elb") #set directory 
filelist = list.files(dir) #save file names into filelist 

myfile = matrix() 
#Read files into R 
for (i in 1:length(filelist)){ 
    myfile[i] = readLines(filelist[i]) 

     *code with all calculations* 

    write.csv(x = finalDF, file = paste (filename[i] ,"_output. csv") 
}  

不幸的是,它沒有發揮出來。下面是錯誤消息我得到:

錯誤as.character(X): 不能強迫式「封閉」類型爲「字符」

另外的載體:警告消息: 在MYFILE [ I] < - readlines方法(文件清單:[I]): 數項替換的是不替換長度的倍數

和「report2016-03.txt」是所述第一文件中的代碼應的名稱執行。

有誰知道我應該怎麼做來糾正這個錯誤 - 或者您可以預見的其他任何可能的錯誤?

非常感謝。

============================================== ======================== 下面是一些我使用的資源:

https://www.r-bloggers.com/looping-through-files/

How to iterate over file names in a R script?

Looping through files in R

Loop in R loading files

How to loop through a folder of CSV files in R

+0

「;」的目的是什麼?分隔符爲文件名? – cumin

+0

@cumin,謝謝你指出。這是一個錯字。這不是代碼的一部分。 –

+0

爲什麼使用'readLines'而不是'read.table'或'read.csv'或(個人推薦)'data.table :: fread'有什麼特別的理由? –

回答

0

這對我有用。我使用了一個矢量而不是矩陣,取出readLines()調用並使用paste0,因爲沒有分隔符。

dir = setwd("C:/R_projects") #set directory 
filelist = list.files(dir) #save file names into filelist 

myfile = vector() 
finalDF <- data.frame(a=3, b=2) 
#Read files into R 
for (i in 1:length(filelist)){ 
    myfile[i] = filelist[i] 
    write.csv(x = finalDF, file = paste0(myfile[i] ,"_output.csv")) 
} 
list.files(dir) 
+0

嘿,@cumin感謝您的輸入。但是如何應該將文件讀入R'這樣做'myfile的[I] =文件列表[我]','myfile'將簡單地存儲字符的字符串,它是該文件的名稱。 –

+0

對不起思考的問題正在寫基於現有的文件名命名的文件。是的,我看你還是需要閱讀的文件和創建的DF寫與變換名稱的文件。你可以閱讀任何文件磁盤? – cumin

+0

如果用來代替readlines方法read.csv?我說什麼,要我的循環'A = read.csv(文件清單:[1])',它讀取和打印的所有我只是以前的解決方案中創建的文件(它們有不同的名字,但有相同的DF),而是在文件中打印數據的,你可以在令狀前,一些其他的方式處理它將新處理的數據存入磁盤。 – cumin

相關問題