私は言うベクトルを持っています
c(1,1,1,1,1,1,2,3,4,5,7,7,5,7,7,7)
各要素を数えて、たとえば最も一般的な 3 つの要素、つまり 1、7、5 を返すにはどうすればよいですか?
これは重複していると確信していますが、答えは簡単です:
sort(table(variable),decreasing=TRUE)[1:3]
これがテーブルアプローチよりも優れているかどうかはわかりませんが、リストがすでに要因である場合、その要約メソッドは頻度カウントを提供します:
> 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"
ベクトルに整数のみが含まれている場合、他の何よりもはるかにtabulate
高速になります。注意すべき問題がいくつかあります。
つまり、あなたの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))+1
whenを追加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
を使用できます。table
useNA="always"
table() 関数を使用して、配列/ベクトル内の値の頻度の集計を取得し、このテーブルを並べ替えることができます。
x = c(1, 1, 1, 2, 2)
sort(table(x))
2 1
2 3