2014-04-24 40 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值。问题是,当我只有一个变量没有数据时,我不能删除那些日子。 –

相关问题