Как подсчитать, сколько значений на уровень в данном коэффициенте?
У меня есть data.frame mydf
с около 2500 строк. Эти строки соответствуют 69 классам объектов в colum 1 mydf$V1
, и я хочу подсчитать, сколько строк на класс объектов у меня есть.
Я могу получить коэффициент этих классов с помощью:
objectclasses = unique(factor(mydf$V1, exclude="1"));
Каков краткий R-способ подсчета строк для класса объектов? Если бы это был какой-то другой язык, я бы проходил массив с циклом и сохранял счет, но я новичок в программировании R и пытаюсь использовать R-векторизованные операции.
Ответы
Ответ 1
Или используя библиотеку 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
, а также подробную информацию о отдельных функциях.
Ответ 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
Ответ 3
Использование пакета plyr
:
library(plyr)
count(mydf$V1)
Он вернет вам частоту каждого значения.
Ответ 4
Используя data.table
library(data.table)
setDT(dat)[, .N, keyby=ID] #(Using @Paul Hiemstra `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())
Ответ 5
Мы можем использовать summary
в столбце факторов:
summary(myDF$factorColumn)
Ответ 6
Еще один подход заключается в применении функции n(), которая считает количество наблюдений
library(dplyr)
library(magrittr)
data %>%
group_by(columnName) %>%
summarise(Count = n())
Ответ 7
Используйте пакет plyr с lapply, чтобы получить частоты для каждого значения (уровня) и каждой переменной (фактора) в вашем фрейме данных.
library(plyr)
lapply(df, count)
Ответ 8
Если я просто хочу узнать, сколько уникальных уровней факторов существует в данных, я использую:
length(unique(df$factorcolumn))