質問

私は数のベクトルを持っています:

numbers <- c(4,23,4,23,5,43,54,56,657,67,67,435,
         453,435,324,34,456,56,567,65,34,435)

どのように私はR値の回数をカウントし、のX のベクトルで表示されていことができますか?

役に立ちましたか?

解決

あなただけのtable()を使用することができます:

> a <- table(numbers)
> a
numbers
  4   5  23  34  43  54  56  65  67 324 435 453 456 567 657 
  2   1   2   2   1   1   2   1   2   1   3   1   1   1   1 

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

> a[names(a)==435]
435 
  3

それとも、それでの作業がより快適にしている場合はdata.frameに変換します:

> as.data.frame(table(numbers))
   numbers Freq
1        4    2
2        5    1
3       23    2
4       34    2
...

他のヒント

最も直接的な方法はsum(numbers == x)です。

numbers == x xが発生毎に場所にTRUEとなる論理ベクターを作成し、suming場合、論理ベクトルが1にTRUEおよびFALSE 0に変換する数値に強制されます。

しかし、浮動小数点数のために、それはのようなものを使用する方が良いということに注意してください:。sum(abs(numbers - x) < 1e-6)

私はおそらくこのような何かをするだろう。

length(which(numbers==x))

しかし、実際に、より良い方法がある。

table(numbers)

count(numbers)パッケージからplyrもあります。私の意見でtableよりもはるかに便利ます。

私の好適な解決策は値を返しますrle、その値が順番に登場する回数を表す(ラベル、あなたの例ではx)と長さを、使用します。

rlesortを組み合わせることで、あなたはどのような値が出現した回数をカウントする、非常に高速な方法を持っています。これは、より複雑な問題で参考にすることができます。

例:

> numbers <- c(4,23,4,23,5,43,54,56,657,67,67,435,453,435,324,34,456,56,567,65,34,435)
> a <- rle(sort(numbers))
> a
  Run Length Encoding
    lengths: int [1:15] 2 1 2 2 1 1 2 1 2 1 ...
    values : num [1:15] 4 5 23 34 43 54 56 65 67 324 ...

必要な値が表示されない、またはそれ以降のためにその値を格納する必要がある場合は、a data.frameを行います。

> b <- data.frame(number=a$values, n=a$lengths)
> b
    values n
 1       4 2
 2       5 1
 3      23 2
 4      34 2
 5      43 1
 6      54 1
 7      56 2
 8      65 1
 9      67 2
 10    324 1
 11    435 3
 12    453 1
 13    456 1
 14    567 1
 15    657 1

私は私が一つの値ではなく、すべての値の頻度を知りたいということは稀である見つけ、RLEカウントし、それらのすべてを保存を取得する最も簡単な方法のようです。

そのためのRで標準機能があります。

tabulate(numbers)

ここ1つの、迅速かつ汚い方法です。

x <- 23
length(subset(numbers, numbers==x))
numbers <- c(4,23,4,23,5,43,54,56,657,67,67,435 453,435,324,34,456,56,567,65,34,435)

> length(grep(435, numbers))
[1] 3


> length(which(435 == numbers))
[1] 3


> require(plyr)
> df = count(numbers)
> df[df$x == 435, ] 
     x freq
11 435    3


> sum(435 == numbers)
[1] 3


> sum(grepl(435, numbers))
[1] 3


> sum(435 == numbers)
[1] 3


> tabulate(numbers)[435]
[1] 3


> table(numbers)['435']
435 
  3 


> length(subset(numbers, numbers=='435')) 
[1] 3

あなたが、その後出現回数をカウントしたい場合は、sapply機能を利用することができます:

index<-sapply(1:length(numbers),function(x)sum(numbers[1:x]==numbers[x]))
cbind(numbers, index)

出力:

        numbers index
 [1,]       4     1
 [2,]      23     1
 [3,]       4     2
 [4,]      23     2
 [5,]       5     1
 [6,]      43     1
 [7,]      54     1
 [8,]      56     1
 [9,]     657     1
[10,]      67     1
[11,]      67     2
[12,]     435     1
[13,]     453     1
[14,]     435     2
[15,]     324     1
[16,]      34     1
[17,]     456     1
[18,]      56     2
[19,]     567     1
[20,]      65     1
[21,]      34     2
[22,]     435     3

あなたが行以下に望むものは何でも番号を変更することができます。

length(which(numbers == 4))

テーブルを使用しますがnamesとの比較なします:

numbers <- c(4,23,4,23,5,43,54,56,657,67,67,435)
x <- 67
numbertable <- table(numbers)
numbertable[as.character(x)]
#67 
# 2 
あなたが別の要素数回のカウントを使用しているとき、

tableに便利です。あなただけの1つのカウントが必要な場合は、使用しsum(numbers == x)

私は便利見つけるもう一つの方法は次のとおりです。

numbers <- c(4,23,4,23,5,43,54,56,657,67,67,435,453,435,324,34,456,56,567,65,34,435)
(s<-summary (as.factor(numbers)))

この因子するデータセットを変換し、要約()私たちのコントロールトータル(一意の値の数)を与えます。

出力されます:

4   5  23  34  43  54  56  65  67 324 435 453 456 567 657 
2   1   2   2   1   1   2   1   2   1   3   1   1   1   1 

これは、好ましい場合にデータフレームとして格納することができる。

  

as.data.frame(CBIND(数=名(複数可)のFreq = S)、stringsAsFactors = F、row.names = 1:長さ(S))

ここrow.namesは、行名の名前を変更するために使用されています。 row.namesを使用せずに、複数の列名は、新しいデータフレームの行名として使用されている

出力されます:

     Number Freq
1       4    2
2       5    1
3      23    2
4      34    2
5      43    1
6      54    1
7      56    2
8      65    1
9      67    2
10    324    1
11    435    3
12    453    1
13    456    1
14    567    1
15    657    1

タグの特定の要素をカウントするさまざまな方法があります
library(plyr)
numbers =c(4,23,4,23,5,43,54,56,657,67,67,435,453,435,7,65,34,435)

print(length(which(numbers==435)))

#Sum counts number of TRUE's in a vector 
print(sum(numbers==435))
print(sum(c(TRUE, FALSE, TRUE)))

#count is present in plyr library 
#o/p of count is a DataFrame, freq is 1 of the columns of data frame
print(count(numbers[numbers==435]))
print(count(numbers[numbers==435])[['freq']])

これは明白な意味で、outer続く等式のメトリックスを取得するためにrowSumsで行うことができます。
同じデータセットの数とnumbersを持っているために、data.frameが最初に作成されます。あなたが別の入力と出力をしたい場合、この手順は必要ありません。

df <- data.frame(No = numbers)
df$count <- rowSums(outer(df$No, df$No, FUN = `==`))
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top