60

私は言うベクトルを持っています

c(1,1,1,1,1,1,2,3,4,5,7,7,5,7,7,7)

各要素を数えて、たとえば最も一般的な 3 つの要素、つまり 1、7、5 を返すにはどうすればよいですか?

4

4 に答える 4

102

これは重複していると確信していますが、答えは簡単です:

sort(table(variable),decreasing=TRUE)[1:3]
于 2013-06-28T22:38:10.813 に答える
14

これがテーブルアプローチよりも優れているかどうかはわかりませんが、リストがすでに要因である場合、その要約メソッドは頻度カウントを提供します:

> summary(as.factor(c(1,1,1,1,1,1,2,3,4,5,7,7,5,7,7,7)))
1 2 3 4 5 7 
6 1 1 1 2 5 

そして、次のように、最も頻繁に上位 3 つを取得できます。

> names(sort(summary(as.factor(c(1,1,1,1,1,1,2,3,4,5,7,7,5,7,7,7))), decreasing=T)[1:3])
[1] "1" "7" "5"
于 2013-06-28T22:47:46.883 に答える
9

ベクトルに整数のみが含まれている場合、他の何よりもはるかにtabulate高速になります。注意すべき問題がいくつかあります。

  • デフォルトでは、1 から N までの数値のカウントを返します。
  • 名前のないベクトルを返します。

つまり、あなたのx = c(1,1,1,3)thentabulate(x)が返される場合(3, 0, 1)。カウントは1 to max(x)デフォルトであることに注意してください。

tabulate任意の数値を渡すことができることを確認するには、どのように使用できますか?

set.seed(45)
x <- sample(-5:5, 25, TRUE)
#  [1]  1 -2 -3 -1 -2 -2 -3  1 -3 -5 -1  4 -2  0 -1 -1  5 -4 -1 -3 -4 -2  1  2  4

abs(min(x))+1whenを追加min(x) <= 0して、値が 1 から始まるようにします。 の場合min(x) > 0は、直接使用tabulateします。

sort(setNames(tabulate(x + ifelse(min(x) <= 0, abs(min(x))+1, 0)), 
      seq(min(x), max(x))), decreasing=TRUE)[1:3]

ベクトルに が含まれている場合は、 withパラメータNAを使用できます。tableuseNA="always"

于 2013-06-28T22:51:07.733 に答える
2

table() 関数を使用して、配列/ベクトル内の値の頻度の集計を取得し、このテーブルを並べ替えることができます。

x = c(1, 1, 1, 2, 2)
sort(table(x))
2 1
2 3
于 2013-06-28T22:39:25.207 に答える