2017-12-11 12 views
1

dplyr集計関数を使用しています。私のデータにはNAsが含まれているので、呼び出しごとにna.rm = TRUEを含める必要があります。例えば:dplyrの関数ごとにna.rm = TRUEを保存する

group <- rep(c('a', 'b'), 3) 
value <- c(1:4, NA, NA) 
df = data.frame(group, value) 

library(dplyr) 
group_by(df, group) %>% summarise(

      mean = mean(value, na.rm=TRUE), 

      sd = sd(value, na.rm=TRUE), 

      min = min(value, na.rm=TRUE)) 

は一度だけではなく、各行の TRUE引数na.rm =を書くためにそこに方法は何ですか?

+0

https://stackoverflow.com/questions/17418640/is-it-possible-to-set-na-rm-to-true-globallyあなたはna.omit' '使用することができ –

+1

:' DF% %1%NA.omit()%>%summarize() ' – PoGibas

+0

na.omit()は少なくとも1つのNAを持つ行全体を削除します。私はそれを望んでいない。 – Rtist

答えて

3

あなたが供給列に対して複数の関数を計算し、それらの間で共有されている引数を設定することができますされ、summarise_atを使用する必要があります。

df %>% group_by(group) %>% 
    summarise_at("value", 
       funs(mean = mean, sd = sd, min = min), 
       na.rm = TRUE) 
+0

はこの機能を知らなかった。おかげで – Rtist

1

あなたが1つの列のみにあなたの関数を適用することを計画している場合は、変数NAを除外するためにfilter(!is.na())を使用できます(つまり、他の変数のNAはプロセスに影響しません)。

group <- rep(c('a', 'b'), 3) 
value <- c(1:4, NA, NA) 
df = data.frame(group, value) 

library(dplyr) 

group_by(df, group) %>% 
    filter(!is.na(value)) %>% 
    summarise(mean = mean(value), 
      sd = sd(value), 
      min = min(value)) 

# # A tibble: 2 x 4 
# group mean  sd min 
# <fctr> <dbl> <dbl> <dbl> 
# 1  a  2 1.414214  1 
# 2  b  3 1.414214  2 
+0

面白い、ありがとう! – Rtist

関連する問題