如何计算在R中具有NA值的data.frame中运行的cor.test()?

时间:2014-04-24 23:02:47

标签: r correlation na

我正在尝试在我的每日气候数据之间进行 running()关联,问题是我的data.frame中有很多缺失值(NA)。我正在使用 cor.test(),因为我需要获取 p.values 。例如,在某些天我没有降水或湿度值,我想知道如何计算与温度数据的运行相关性,但省略NA值。

这是一个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))

1 个答案:

答案 0 :(得分:2)

您可以使用complete.cases获取完整行的逻辑向量(TRUE =完成);然后在用于测试的ad-hoc函数中进行子集化

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)

但是你无法处理太少行情况(以直截了当的方式)。