我有一个大约2500行的data.frame mydf
。这些行对应于colum 1 mydf$V1
中的69个对象类,我想计算每个对象类有多少行。
我可以通过以下方式获得这些类的因素:
objectclasses = unique(factor(mydf$V1, exclude="1"));
计算每个对象类的行的简洁方法是什么?如果这是任何其他语言,我将遍历一个带循环的数组并保持计数,但我是R编程的新手并试图利用R的矢量化操作。
答案 0 :(得分:37)
或使用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中使用管道。实际上,上面的代码将dat
导入group_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
introduction;有关各个功能的详细信息,请参阅文档。
答案 1 :(得分:30)
这有两种方法:
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
答案 2 :(得分:21)
使用plyr
包:
library(plyr)
count(mydf$V1)
它会返回每个值的频率。
答案 3 :(得分:14)
使用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())
答案 4 :(得分:4)
我们可以在因子列上使用summary
:
summary(myDF$factorColumn)
答案 5 :(得分:4)
另一种方法是应用n()函数,该函数计算观察次数
library(dplyr)
library(magrittr)
data %>%
group_by(columnName) %>%
summarise(Count = n())
答案 6 :(得分:1)
使用包plyr和lapply来获取数据框中每个值(级别)和每个变量(因子)的频率。
library(plyr)
lapply(df, count)
答案 7 :(得分:0)
如果我只想知道数据中存在多少个唯一因子水平,我可以使用:
length(unique(df$factorcolumn))