2016-08-02 4 views
1

可能であれば、カウントのベクトルを作成したかったのです。 例えば:私はベクトルカウントのベクトルを作成する

x <- c(3, 0, 2, 0, 0)

を持ってどのように私は0と3の間のすべての整数の周波数ベクトルを作成することができますか?それぞれ私に0、1、2、および3のカウントを与える

> 3 0 1 1

:理想的には私はこのようなベクトルを取得したいです。

非常に高く評価されました!

+0

[Rにおけるベクターから周波数カウントの作成](http://stackoverflow.com/questions/20869374/create-the-frequency-count-from-a-vector-in-rの可能な重複) –

+2

[文字列のベクトル内の各文字の数を数える]の可能な複製(http://stackoverflow.com/questions/19476210/counting-the-number-of-each-letter-in-a-vector-of -strings) – jogo

+0

これは重複していますが、2つ以上のリンクは正しいものではありません。 – zx8754

答えて

2

あなたは、単にtable(x)を使用することは十分ではありません

table(factor(x, levels=0:3)) 

を行うことができます。

tabulate(factor(x, levels = min(x):max(x))) 
+0

私はそれを試みましたが、それは私にエラーを与えます、要因(ギャップ、ラベル= 0:3)のエラー: 'ラベル'が無効です。長さ4は1または3でなければなりません – Lin

+0

それは動作します!みんなありがとう! – Lin

+2

ビット "ロバスト"の方が 'r

1

高速です

それともtabulateであなただけの)(表を使用することができます。

a <- table(x) 
a 
x 
#0 2 3 
#3 1 1 

次に、あなたがそれをサブセットすることができます

a[names(a)==0] 
#0 
#3 

かに変換data.frameあなたはそれをより快適に使用することができます:

u<-as.data.frame(table(x)) 
u 
# x Freq 
#1 0 3 
#2 2 1 
#3 3 1 

編集1:レベルの場合 :

a<- as.data.frame(table(factor(x, levels=0:3))) 
+0

あなたはレベルがありません。他の答えを見てください –

1

あなたはrleを使用してこれを行うことができます(それは十分に最適化されていない場合、私は、数分でとても残念これを作りました)。

x = c(3, 0, 2, 0, 0) 
r = rle(x) 
f = function(x) sum(r$lengths[r$values == x]) 
s = sapply(FUN = f, X = as.list(0:3)) 
data.frame(x = 0:3, freq = s) 
#> data.frame(x = 0:3, freq = s) 
# x freq 
#1 0 3 
#2 1 0 
#3 2 1 
#4 3 1 
関連する問題