2014-10-13 2 views
6

나는 R에서 dplyr 패키지를 배워서 정말 좋아합니다. 하지만 지금은 데이터에서 NA 값을 다루고 있습니다.R : dplyr로 시간당 평균 NA 값 바꾸기

#create an example 
day = c(1, 1, 2, 2, 3, 3) 
hour = c(8, 16, 8, 16, 8, 16) 
profit = c(100, 200, 50, 60, NA, NA) 
shop.data = data.frame(day, hour, profit) 

#calculate the average for each hour 
library(dplyr) 
mean.profit <- shop.data %>% 
    group_by(hour) %>% 
    summarize(mean=mean(profit, na.rm=TRUE)) 

> mean.profit 
Source: local data frame [2 x 2] 

    hour mean 
1 8 75 
2 16 130 

내가 NA의 3 일의의를 대체하기 위해 명령을 변환 dplyr를 사용할 수 :

나는이 아주 쉬운 예로, 예를 들어, 해당 시간의 평균 어떤 NA를 교체하고 싶습니다 75 (8:00)과 130 (16:00)으로 이익을 얻으시겠습니까?

답변

15

shop.data %>% 
      group_by(hour) %>% 
      mutate(profit= ifelse(is.na(profit), mean(profit, na.rm=TRUE), profit)) 

    # day hour profit 
    #1 1 8 100 
    #2 1 16 200 
    #3 2 8  50 
    #4 2 16  60 
    #5 3 8  75 
    #6 3 16 130 

시도하거나 당신은 기본 기능 replace

shop.data %>% 
      group_by(hour) %>% 
      mutate(profit= replace(profit, is.na(profit), mean(profit, na.rm=TRUE))) 
+1

내가 여기 온 열쇠를 잊어 버렸습니다 :'na.rm = TRUE' – jbkunst

3

A (덜 우아한) 방법을 사용할 수 있습니다 내가 통지를하지 않았기 때문에

transform(shop.data, 
      profit = ifelse(is.na(profit), 
          ave(profit, hour, FUN = function(x) mean(x, na.rm = TRUE)), 
          profit)) 

# day hour profit 
# 1 1 8 100 
# 2 1 16 200 
# 3 2 8  50 
# 4 2 16  60 
# 5 3 8  75 
# 6 3 16 130