30
a <- c(rep(1:2,3))
b <- c("A","A","B","B","B","B")
df <- data.frame(a,b)

> str(b)
chr [1:6] "A" "A" "B" "B" "B" "B"

  a b
1 1 A
2 2 A
3 1 B
4 2 B
5 1 B
6 2 B

a変数でグループ化し、最も頻度の高い値を返したいb

私の望ましい結果は次のようになります

  a b
1 1 B
2 2 B

そのdplyr中には次のようなものがあります

df %>% group_by(a) %>% summarize (b = most.frequent(b))

dplyr問題を視覚化するためだけに言及しました。

4

3 に答える 3

31

重要なのは、両方aでグループ化を開始bし、頻度を計算してから、グループごとに最も頻度の高いもののみを取得することaです。たとえば、次のようになります。

df %>% 
  count(a, b) %>%
  slice(which.max(n))

Source: local data frame [2 x 3]
Groups: a

  a b n
1 1 B 2
2 2 B 2

もちろん、他のアプローチもあるので、これは可能な「キー」の 1 つにすぎません。

于 2015-04-28T14:25:27.100 に答える
3

by()の各値、aを作成し、table()その中の最大のエントリをb抽出します。names()table()

> with(df,by(b,a,function(xx)names(which.max(table(xx)))))
a: 1
[1] "B"
------------------------
a: 2
[1] "B"

これをラップしas.table()て、よりきれいな出力を得ることができますが、それでも目的の結果と完全には一致しません。

> as.table(with(df,by(b,a,function(xx)names(which.max(table(xx))))))
a
1 2 
B B
于 2015-04-28T14:25:20.280 に答える