2017-11-30 6 views
1

dplyr内のカラムを要約する関数を作成しています。 group_byで定義されたグループ内:ある列の値が一定の定数kの場合、そのグループの集計値はkである必要がありますが、列が定数でない場合、値はNAになります。dplyrの特定のタイプの 'NA'カラムを作成します

理想的には、NAを入力列のクラスに変換したいと思います。したがって、それが数値列の場合、サマリー関数はas(NA, "numeric")の等価を返します。

上記を実行するには、関数.collapse_if_constantを書きました。この質問を簡単にするために、私はちょうどdplyrの中で指定されたタイプのNA列を作る方法を考え出したいと思います。

その後

DF <- data.frame(x = "A", y = 1:3, z = c(TRUE, FALSE, TRUE)) 

DF %>% 
    group_by(x) %>% 
    summarise(y = as(NA, class(y)), z = as(NA, class(z))) 

戻り

x  y  z 
    (fctr) (lgl) (lgl) 
1 A  NA NA 

しかし、私はそれが見えるようにしたいみよう

tibble::tibble(x = factor("A"), y = as(NA, "numeric"), z = NA) 
    x  y  z 
    (fctr) (dbl) (lgl) 
1 A  NA NA 

...要約された列は入力列と同じクラスになります。


この質問を無視してください。私はdplyrの以前のリリースを使用していました(v0.4.3;現在のCRANは0.7.4)。問題は解決されました。 summarize_atを使用して

+0

'NA'あなたは' NA_integer_'、 'NA_real_'、' NA_complex_'、と 'NA_character_'を使用することができることに留意します。整数クラス、数値クラス、複合クラス、および文字クラスの場合はそれぞれです。 – Benjamin

+0

私は知っていますが、特定のタイプのNAを動的に構築するには、 '(NA、type_name)'を使用してください。 –

答えて

2

には、例えば、タイプを維持するようだ:?

DF %>% 
    group_by(x) %>% 
    summarise_at(c("y", "z"), funs(as(NA, class(.)))) 
+0

ARG!申し訳ありません、私はdplyr :: 0.4.3を使用していました。 dplyr :: 0.7でうまく動作します。ご協力いただきありがとうございます。 –

関連する問題