我正在尝试在我的每日气候数据之间进行 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))
答案 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)
但是你无法处理太少行情况(以直截了当的方式)。