2015-04-20 57 views
0

我正在嘗試編寫一個函數,該函數將返回跨多個.csv文件的列的平均值。然而,該功能似乎與我的平均值計算被卡住,因爲它返回NA值:上解決這個問題不勝感激創建一個平均值函數,返回有關NAs的錯誤消息

pollutantmean <- function(directory, pollutant, id = 1:332){ 
    dy <- list.files("specdata", full.names = T) 
    df <- data.frame() 
    for(i in id){ 
    rbind(df,read.csv(dy[i])) 
    } 
    if(pollutant == "nitrate"){mean(df$nitrate, na.rm = TRUE)} 
    if(pollutant == "sulfate"){mean(df$sulfate, na.rm = TRUE)} 
} 

建議。

+0

你一定可以在這裏找到有用的鏈接:http://stackoverflow.com/search?tab=newest&q=[r]%20pollutantmean –

+1

我相信read.csv的默認行爲是忽略頭。如果它沒有得到名稱,那麼它不會知道df $硝酸鹽是什麼。也許嘗試添加'header = T'到read.csv部分? – goodtimeslim

+0

@goodtimeslim它確實得到'header'。 'head(read.csv('001.csv'),2) #硫酸鹽硝酸鹽的日期ID 1 2003-01-01不適用1 2 2003-01-02不適用1' – akrun

回答

1

嘗試明確從您的自定義函數返回的平均值是這樣的:

pollutantmean <- function(directory, pollutant, id = 1:332) { 
    dy <- list.files("specdata", full.names=TRUE) 
    df <- data.frame() 
    for (i in id) { 
     df <- rbind(df, read.csv(dy[i])) 
    } 
    if(pollutant == "nitrate") { return(mean(df$nitrate, na.rm=TRUE)) } 
    if(pollutant == "sulfate") { return(mean(df$sulfate, na.rm=TRUE)) } 
} 

如果不能解決這個問題,那麼你很可能有包含字符數據的數據框架柱,導致R給你值爲NA。插入在pollutantmean功能這兩條線,看看您是否正在處理與數字列:

print(class(df$nitrate)) 
print(class(df$sulfate)) 

如果你看到「因素」,或比數字其他任何東西,那麼你會知道你的輸入數據包含比其他東西純數字。

+0

感謝您的接受......我錯過了^ ^ –