2014-04-24 4 views
1

나는 나의 일상 기후 데이터 간의 실행() 상관 관계를 할 노력하고있어, 그리고 문제는 내가 내 data.frame 많은 누락 된 값 (NA)를 가지고있다. 나는 p.values ​​을 얻을 필요가 있기 때문에 cor.test()을 사용하고 있습니다. 예를 들어, 나는 강수량이나 습도 값이없는 어떤 날에는 온도 데이터와 상관 관계를 계산하는 방법을 알고 싶지만 NA 값은 생략하고 싶습니다. 여기NA 값이 R 인 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
당신은 완전한 행 논리 벡터 ( TRUE = 전체)를 얻기 위해 사용할 수 complete.cases

; 당신은 또한

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

을 고려할 수도

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)) 

테스트에 사용되는 내부 애드혹 기능을 서브 세트하지만 당신은 (간단한 방식으로) 너무 몇-행 상황을 처리 할 수 ​​없습니다.

+0

는 전체 데이터 집합을 덮어 심각한 조금, 당신은 생각하지 않는다 될 수 있을까요? –

+0

@BondedDust 확인 감사, –

+0

감사 @Luca Braglia 편집하지만 아이디어는 NA 행을 제거하지 않는 것입니다 (내가 :) 조금 너무 가혹한하고있어 일부 일), 그것은 NA 값을 무시합니다. 예를 들어 합계 ('fun = sum')를 사용하여 동일한 실행 함수를 계산할 때처럼 결과는 계산할 수없는 기간에 NA 값을 제공합니다. 문제는 데이터가없는 한 변수에서만 그 요일을 제거 할 수 없다는 것입니다. –