2017-11-22 3 views
1

I 내가 이제모든 숫자 벡터 요약

df1 = df %>% 
    group_by(city, ID ,gender) %>% 
    summarise_if(is.numeric, function(x) sum(x,na.rm = T)/4) 

아래와 같이 코드를 작성하고, 출력을 얻기 위해 4

city = c("NY","NY","NY","NY","MI","MI","MI","MI","MI","MI")  
ID = c("1","1","1","1","2","2","2","2","2","2") 
gender = c("M","M","F","F","F","F","F","F","M","M") 
val_1 = c(1, 1, NA, NA, 2, NA, NA, 4, 6, 7) 
val_2 = c(NA, 4, 4, 7, 9, 10, NA, NA, NA,NA) 
df <- data.frame(city, ID, gender, val_1, val_2) 

모든 숫자 열 및 제산을 합산 할 데이터 프레임을 가지고 문제는 값이 누락 된 경우 0 대신에 채우는 것입니다 NA

위의 코드에서 수정하려면

를 수정하십시오.
city ID gender val_1 val_2 
MI  2 F  1.5 4.75 
MI  2 M  3.25 0/NA 
NY  1 F   0/NA 2.75 
NY  1 M  0.5 1 
+1

함수에 조건 ifelse' '추가를 추가 있습니다 NAifall를 반환하기 위해 만들 수있는,'DF %> % GROUP_BY (도시, ID, 성별,) summary.if (숫자, 함수 (x) ifelse (all (is.na (x)), NA, sum (x, na.rm = T)/4))' –

+0

고마워요 Ronak .. – sasir

답변

1

우리는 if/else이 요소가 NA

df %>% 
    group_by(city, ID ,gender) %>% 
    summarise_if(is.numeric, funs(if(all(is.na(.))) NA else sum(., na.rm = TRUE)/4)) 
    #or without the if/else 
    #summarise_if(is.numeric, funs((NA^all(is.na(.)))*sum(., na.rm = TRUE)/4)) 
# A tibble: 4 x 5 
# Groups: city, ID [?] 
# city  ID gender val_1 val_2 
# <fctr> <fctr> <fctr> <dbl> <dbl> 
#1  MI  2  F 1.50 4.75 
#2  MI  2  M 3.25 NA 
#3  NY  1  F NA 2.75 
#4  NY  1  M 0.50 1.00 
+0

감사합니다 akrun ... 시간 효율성을 위해 data.table에서 동일한 작업을 수행 할 수 있습니까? – sasir

+0

@sasir 요약은 거의 비슷한 효율성을 가져야합니다. 만약 당신이 'data.table'' nm1 <- names (df) [sapply (df, is.numeric)]; setDT (df) [, lapply (.SD, function (x) if (도시, 신분증, 성별), .SDcols = nm1]' – akrun

+1

akrun님께, 즉각적인 응답을 주셔서 감사합니다. (모든 (is.na (.)) NA else (x, na.rm = TRUE)/4) – sasir