3

グループ化された data_frame で要約する必要があります (警告: dplyr を使用したソリューションは非常に高く評価されますが、必須ではありません) 各グループの何か (シンプル) と「他の」グループの同じものの両方。

最小限の例

if(!require(pacman)) install.packages(pacman)
pacman::p_load(dplyr)

df <- data_frame(
    group = c('a', 'a', 'b', 'b', 'c', 'c'),
    value = c(1, 2, 3, 4, 5, 6)
)

res <- df %>%
    group_by(group) %>%
    summarize(
        median        = median(value)
#        median_other  = ... ??? ... # I need the median of all "other"
                                     # groups
#        median_before = ... ??? ... # I need the median of groups (e.g
                                 #    the "before" in alphabetic order,
                                 #    but clearly every roule which is
                                 #    a "selection function" depending
                                 #    on the actual group is fine)
    )

私の期待される結果は次のとおりです

group    median    median_other    median_before
  a        1.5         4.5               NA
  b        3.5         3.5               1.5
  c        5.5         2.5               2.5

「グループを除外して dplyr を要約する」、「グループ以外を要約する dplyr を要約する」などの Google 文字列を検索しましたが、dplyr のドキュメントを検索しましたが、解決策が見つかりませんでした。

ここで、これ ( dplyr を使用してグループに一致しない値を要約する方法) は適用されません。合計でのみ実行されるためです。 )。より複雑な関数リクエスト (つまり、平均、sd、またはユーザー関数) はどうですか? :-)

ありがとうございます

PS:summarize()は例です。同じ質問が、mutate()グループに基づいて機能する、または他の dplyr 関数につながります。

4

2 に答える 2

2

これが私の解決策です:

res <- df %>%
  group_by(group) %>%
  summarise(med_group = median(value),
            med_other = (median(df$value[df$group != group]))) %>% 
  mutate(med_before = lag(med_group))

> res
Source: local data frame [3 x 4]

      group med_group med_other med_before
  (chr)     (dbl)     (dbl)      (dbl)
1     a       1.5       4.5         NA
2     b       3.5       3.5        1.5
3     c       5.5       2.5        3.5

私はすべての dplyr ソリューションを考え出そうとしていましたが、ベース R サブセット化median(df$value[df$group != group])は、現在のグループにないすべての観測値の中央値を返すことでうまく機能します。

これが問題の解決に役立つことを願っています。

于 2016-04-06T22:35:41.910 に答える