2015-06-07 35 views
2

我需要計算已下載的5個文件中的overallMin。該文件名都具有相同的格式:R中的循環(意外符號錯誤)

「2013年7月,citibike.csv」, 「2013-08-citibike.csv」

「2013-09-citibike.csv」,「2013-10-citibike。 CSV」

「2013-11-citibike.csv」, 「2013-12-citibike.csv」

我需要編寫一個for循環讀取這些文件,來計算(一個特定列的),用於最小每個文件,然後是所有文件的總體最小值。

到目前爲止,我有這個

numbers <- 07:12 
filenames <- paste("2013-", numbers, "-citibike", ".csv", sep="") 

overallMin <- 0 
for (i in filenames) { 
    trips <- read.csv(i) 
    newMin <- min(trips) 
    if (overallMin < newMin) { 
     overallMin <- newMin 
    } 
} 
overallMin 

困惑與CSV部分。另外,我正在一個錯誤:意外的符號「爲(i的文件名){車次= read.csv(I)newMin」

+0

爲什麼沒有被定義的分隔符正確的文件名('九月= 「」')? –

+0

我強烈懷疑是一個錯字,或者你不會理解大寫字母 - 我不是小寫字母i。使用整個數據幀的'min'也會有點奇怪(但這不是錯誤)。 –

+0

如果您將'07:12'發佈到控制檯,您幾乎可以立即看到您的問題(沒有領先0)。但這只是文件名稱的問題,您的其他代碼也會出現問題。 –

回答

1

定義文件名目錄ectly。另一件事,你需要指定列號,或者你想要所有文件的最小值?

filenames <-c("2013-07-citibike.csv", "2013-08-citibike.csv", 
       "2013-09-citibike.csv", "2013-10-citibike.csv", 
       "2013-11-citibike.csv", "2013-12-citibike.csv") 

或使用sprintf獲得

numbers <- 07:12 
filenames <- paste("2013-", sprintf("%02d",numbers), "-citibike", ".csv", sep="") 

overallMin <- 1e80 #big number or the minimum will probably be zero 
desirecol <- 2 
for (i in filenames) { 
    trips <- read.csv(i) 
    newMin <- min(trips[,desirecol]) 
    if (overallMin < newMin) { 
    overallMin <- newMin 
    } 
} 
overallMin 
+0

我需要指定列名稱。感謝您的幫助 – castleminer

+0

我試過你的代碼,但我得到這個錯誤信息。文件錯誤(文件「rt」):無法打開連接另外:警告信息: 在文件(文件「rt」)中: 無法打開文件'2013-07-citibike.csv':沒有這樣的文件或目錄。該文件實際上在那裏。 – castleminer

+0

你需要指定R你有文件的目錄:'setwd(「c:/ Your_directory /」)' – Robert

0

錯誤消息「意外符號」幾乎總是意味着缺少逗號或括號或者其他一些愚蠢的語法錯誤。我必須不同意@ BrandonBertelson評論的主旨。讀取錯誤信息是通常有幫助。在這種情況下,我們有必要知道I對於i的替換是不恰當的,或者海報沒有發佈確切的錯誤消息,或者他的編輯器插入了非打印字符。我無法通過將I替換爲i來重現錯誤,因爲存在I()函數,解析器正確地向我指出我給read.csv()提供了錯誤類型的參數。

> for(i in 1:5) { my <- read.csv(I)} 
Error in read.table(file = file, header = header, sep = sep, quote = quote, : 
    'file' must be a character string or connection 

該理論認爲,文件名是錯誤的(我同意,代碼應該使用list.files不適合的錯誤信息。我可以通過簡單地把前兩行放在同一行重複錯誤消息:

> for(i in 1:5) { my <- read.csv(i) newMin <- min(trips[,desirecol])} 
Error: unexpected symbol in "for(i in 1:5) { my <- read.csv(i) newMin" 

對於具體問題(除了形成仍然是模糊的錯誤),這應該會成功:

yourpath <- insert your path or getwd() if in working directory 
colname <- replace_with_column_name 

min(       #min of all the mins 
    sapply(list.files(yourpath, pattern="citibike.*csv$), #regex match 
    function(f) min(read.csv(f)[[colname]] # the columns rather than a whole dataframe 
         ) # returns the single mins 
    ) 
+0

嗨,對不起,我是一個類型的資本。在我的代碼中,我使用的是小寫字母,但仍然收到錯誤消息 – castleminer

+0

發佈粘貼錯誤消息以替換問題中的文本。將控制檯中的複製文本粘貼到問題中。 –

+0

這是錯誤信息 - 錯誤:意外的符號在「(我在文件名){旅行= read.csv(我)newMin」 – castleminer