Нахождение количества вхождений каждого уровня фактора в списке фреймов данных - PullRequest
0 голосов
/ 09 мая 2018

У меня есть фрейм данных, который я разделил на список фреймов данных по имени. Для факторной переменной «Состояние» есть 3 уровня: Запланированный, Отмененный, Отложенный. Я хотел бы посчитать количество каждого уровня статуса для каждого имени, и я не уверен, как это сделать. Я пытался использовать сводку в lapply, но не смог заставить ее работать. Я также не знаю, есть ли более простой способ сделать это без разделения кадра данных. Я также был бы признателен за несколько советов о том, как предоставить хороший образец списка данных для тех, кто хотел бы дать ответ.

Ответы [ 2 ]

0 голосов
/ 09 мая 2018

Чистое решение для стихов:

library(plyr)
library(dplyr)

#dummy data

df1 <- data.frame(name = factor(c('Dave', 'Bob', 'Ryan')), status = factor(c('a', 'b', 'c')), number = c(10, 20, 30))
df2 <- data.frame(name = factor(c('Dave', 'Bob', 'Ryan')), status = factor(c('b', 'a', 'c')), number = c(5, 23, 61))

#add a column to count factor levels

df1['num'] <- 1
df2['num'] <- 1
ldf <- list(df1, df2)


#solution

rbind.fill(ldf) %>% group_by(name, status) %>% summarise(total_status = sum(num))
0 голосов
/ 09 мая 2018

Вы можете использовать функцию table и предоставить имя столбца, имеющего разные уровни, в качестве параметра, который должен дать вам счетчики для каждого уровня в этой переменной. Как ниже:

#### Iris Example
data(iris)

head(iris)


#### Column name Species have three levels:
#### setosa versicolor virginica
#### Below code counts each level in the iris dataset
table(iris$Species)
#setosa versicolor  virginica 
#50         50         50 

#### Let's split the data randomly
index<-sample(1:nrow(iris),nrow(iris) * .8, replace = FALSE)
dataset_1<-iris[index,]
dataset_2<-iris[-index,]


table(dataset_1$Species)
#setosa versicolor  virginica 
#42         34         44 

table(dataset_2$Species)
#setosa versicolor  virginica 
#8         16          6 
...