2014-04-24 46 views
1

我試圖做一個running()我的日常氣候數據之間的相關性,問題是我的data.frame中有很多缺失值(NA)。我正在使用cor.test(),因爲我需要獲得p.values。例如,在某些日子裏,我沒有降水量或溼度值,我想知道如何計算與我的溫度數據的運行相關性,但省略NA值。如何在R中使用NA值計算data.frame中正在運行的cor.test()?

在這裏與NA值的示例:

library(gtools) 
df <- data.frame(temp=rnorm(100, 10:30), prec=rnorm(100, 1:300), humi=rnorm(100, 1:100)) 

df$prec[c(1:10, 25:30, 95:100)] <-NA 
df$humi[c(15:19, 20:25, 80:90)] <-NA 

corPREC <- t(running(df$temp, df$prec, fun = cor.test, width=10, by=10)) 
corHUMI <- t(running(df$temp, df$humi, fun = cor.test, width=10, by=10)) 

回答

2

可以使用complete.cases,以便獲得完整的行的邏輯矢量(TRUE =完全);然後子集化用於測試過

library(gtools) 
df <- data.frame(temp=rnorm(100, 10:30), prec=rnorm(100, 1:300), 
       humi=rnorm(100, 1:100)) 

df$prec[c(1:10, 25:30, 95:100)] <-NA 
df$humi[c(15:19, 20:25, 80:90)] <-NA 

my.fun <- function(x,y) { 
    my.df <- data.frame(x,y) 
    my.df.cmpl <- my.df[complete.cases(my.df), ] 

    # 3 complete obs is the minimum for cor.test 
    if (nrow(my.df.cmpl)<=2) { 
     return(rep(NA, 4)) 
    } else { 
     my.test <- cor.test(my.df.cmpl$x,my.df.cmpl$y) 
     return(c(my.test$statistic, my.test$p.value, 
       my.test$conf.int)) 
    } 

} 

corPREC <- t(running(df$temp, df$prec, fun = my.fun, width=10, by=10)) 
corHUMI <- t(running(df$temp, df$humi, fun = my.fun, width=10, by=10)) 

內特設的功能,你也可以考慮

my.test <- cor.test(~ x + y, na.action = "na.exclude", data = my.df) 

,但你不能處理太爲數不多的行情況(以直接的方式)。

+0

覆蓋整個數據集可能有點嚴重,您不覺得嗎? –

+0

@BondedDust肯定謝謝(有些日子我有點太嚴厲:)),編輯 –

+0

謝謝@Luca Braglia但是這個想法並不是刪除NA行,而是忽略了NA值。例如,就像我用sum('fun = sum')計算相同的運行函數一樣,結果在不可能計算的時間段中給出NA值。問題是,當我只有一個變量沒有數據時,我不能刪除那些日子。 –

相關問題