2017-09-29 12 views
0

dplyrとsummarize_allを使用して加重平均を計算しようとしています。私が最も具体的には、このポスト、同様の質問を見てきました: How do I compute weighted average using summarise_each? 'Not Found' dplyrによって加重平均を計算しようとしているウェイトのエラーsummarize_all

これは非常に単純明快ようだが、私はエラーメッセージが見つかりませんオブジェクトの重み "を得続けます。

data <- tibble::tribble(~group, ~weight, ~x1, ~x2, 
        1, 1, 3, 2, 
        1, 1, 4, 7, 
        1, 1, 1, 4, 
        2, 1, 2, 2, 
        2, 1, 5, 3, 
        2, 1, 4, 2) 

# Just regular means 
data %>% 
     dplyr::group_by(group) %>% 
     dplyr::summarize_all(mean) 

# First attempt 
data %>% 
     dplyr::group_by(group) %>% 
     dplyr::summarize_all(weighted.mean(., weight)) 

# Second attempt based on syntax from post above 
data %>% 
     dplyr::group_by(group) %>% 
     dplyr::summarize_all(funs(weighted.mean(., weight)), -weight) 

これは私がこのコードを実行したときに何が起こるかです::ここで

は再現例です

> data %>% 
+ dplyr::group_by(group) %>% 
+ dplyr::summarize_all(mean) 
# A tibble: 2 x 4 
    group weight  x1  x2 
    <dbl> <dbl> <dbl> <dbl> 
1  1  1 2.666667 4.333333 
2  2  1 3.666667 2.333333 
> 
> data %>% 
+ dplyr::group_by(group) %>% 
+ dplyr::summarize_all(weighted.mean(., weight)) 
Error in weighted.mean.default(., weight) : object 'weight' not found 
> 
> data %>% 
+ dplyr::group_by(group) %>% 
+ dplyr::summarize_all(funs(weighted.mean(., weight)), -weight) 
Error in eval_bare(dot$expr, dot$env) : object 'weight' not found 

どれでもなぜこれが起こっているの情報とを、どちらかと言えば、私は約何ができますかそれは非常に感謝しています。

ありがとうございます!

答えて

1

summarize_allを使用すると、weight列の重み付け平均も計算しようとしています。

あなたはsummarise_atでより興味がある可能性が高いです:

data %>% 
    dplyr::group_by(group) %>% 
    dplyr::summarize_at(vars(x1, x2), funs(weighted.mean(., weight))) 

# A tibble: 2 x 3 
    group  x1  x2 
    <dbl> <dbl> <dbl> 
1  1 2.666667 4.333333 
2  2 3.666667 2.333333 
+0

はありがとうございました。私はsummarize_atに慣れていませんが、それは正確です。これらの追加のdplyrコマンドについてもっと知る必要があります。 – msheffer

関連する問題