web-dev-qa-db-ja.com

特定の要因のレベルごとにいくつの値をカウントするのですか?

約2500行のdata.frame mydfがあります。これらの行は、colum 1 mydf$V1のオブジェクトの69のクラスに対応し、オブジェクトクラスごとに行数をカウントしたいと思います。これらのクラスの要因は次の方法で取得できます。

objectclasses = unique(factor(mydf$V1, exclude="1"));

オブジェクトクラスごとに行をカウントする簡潔なRの方法は何ですか?これが他の言語である場合、ループを使用して配列を走査し、カウントを維持しますが、Rプログラミングは初めてで、Rのベクトル化された操作を利用しようとしています。

27
Escher

または、dplyrライブラリを使用します。

library(dplyr)
set.seed(1)
dat <- data.frame(ID = sample(letters,100,rep=TRUE))
dat %>% 
  group_by(ID) %>%
  summarise(no_rows = length(ID))

%>%の使用に注意してください。これは、bashでのパイプの使用に似ています。事実上、上記のコードはdatgroup_byにパイプし、その操作の結果はsummariseにパイプされます。

結果は次のとおりです。

Source: local data frame [26 x 2]

   ID no_rows
1   a       2
2   b       3
3   c       3
4   d       3
5   e       2
6   f       4
7   g       6
8   h       1
9   i       6
10  j       5
11  k       6
12  l       4
13  m       7
14  n       2
15  o       2
16  p       2
17  q       5
18  r       4
19  s       5
20  t       3
21  u       8
22  v       4
23  w       5
24  x       4
25  y       3
26  z       1

コンテキストの詳細については dplyrはじめに を、個々の関数の詳細についてはドキュメントを参照してください。

40
Paul Hiemstra

ここでそれを行う2つの方法:

set.seed(1)
tt <- sample(letters,100,rep=TRUE)

## using table
table(tt)
tt
a b c d e f g h i j k l m n o p q r s t u v w x y z 
2 3 3 3 2 4 6 1 6 5 6 4 7 2 2 2 5 4 5 3 8 4 5 4 3 1 
## using tapply
tapply(tt,tt,length)
a b c d e f g h i j k l m n o p q r s t u v w x y z 
2 3 3 3 2 4 6 1 6 5 6 4 7 2 2 2 5 4 5 3 8 4 5 4 3 1 
31
agstudy

plyrパッケージの使用:

library(plyr)

count(mydf$V1)

各値の頻度が返されます。

21
Andriy T.

data.tableを使用

 library(data.table)
 setDT(dat)[, .N, keyby=ID] #(Using @Paul Hiemstra's `dat`)

またはdplyr 0.3を使用して

 res <- count(dat, ID)
 head(res)
 #Source: local data frame [6 x 2]

 #  ID n
 #1  a 2
 #2  b 3
 #3  c 3
 #4  d 3
 #5  e 2
 #6  f 4

または

  dat %>% 
      group_by(ID) %>% 
      tally()

または

  dat %>% 
      group_by(ID) %>%
      summarise(n=n())
15
akrun

ファクター列でsummaryを使用できます。

summary(myDF$factorColumn)
5
Spariant

もう1つのアプローチは、観測数をカウントするn()関数を適用することです

library(dplyr)
library(magrittr)
data %>% 
  group_by(columnName) %>%
  summarise(Count = n())
4
iamigham

パッケージplyrをlapplyとともに使用して、データフレーム内のすべての値(レベル)およびすべての変数(因子)の頻度を取得します。

library(plyr)
lapply(df, count)
1

データ内に存在する一意の因子レベルの数を知りたい場合は、次を使用します。

length(unique(df$factorcolumn))
0
Peter