查找数据帧列表中每个因子级别的出现次数

时间:2018-05-09 14:48:56

标签: r lapply

我有一个数据框,我按名称拆分成数据框列表。对于因子变量“状态”,有3个级别:计划,已取消,推迟。我想计算每个名字的每个级别状态的数量,我不知道该怎么做。我曾尝试在lapply中使用摘要但无法使其工作。我也不知道在没有拆分数据帧的情况下是否有更简单的方法可以做到这一点。对于如何为想要提供答案的人提供数据框列表的良好样本,我也很感激。

2 个答案:

答案 0 :(得分:0)

您可以使用函数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 

答案 1 :(得分:0)

一个整洁的解决方案:

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))