首页 > 解决方案 > r 中的观察计数

问题描述

希望生成一个新列,其中包含每年和每学期出现的每个“类”的计数。

df 的输出如下:

structure(list(class = c("ART", "ART", "ART", "ART", "ART", "PE", 
"PE", "PE", "PE", "PE", "Science", "Science", "Science", "Science", 
"Science", "Music", "Music", "Music", "Music", "Music", "Music", 
"Music", "Music", "Music", "Music", "Music", "Music", "Music", 
"PE", "PE", "PE", "PE", "PE", "PE", "PE", "PE", "PE", "ART", 
"ART", "ART"), year = c("2019", "2020", "2019", "2020", "2019", 
"2020", "2019", "2020", "2019", "2020", "2019", "2020", "2019", 
"2020", "2019", "2020", "2019", "2020", "2019", "2020", "2019", 
"2020", "2019", "2020", "2019", "2020", "2019", "2020", "2019", 
"2020", "2019", "2020", "2019", "2020", "2019", "2020", "2019", 
"2020", "2019", "2020"), term = c("Semester 1", "Semester 1", 
"Semester 1", "Semester 1", "Semester 1", "Semester 1", "Semester 1", 
"Semester 1", "Semester 1", "Semester 1", "Semester 1", "Semester 1", 
"Semester 1", "Semester 1", "Semester 1", "Semester 1", "Semester 1", 
"Semester 1", "Semester 1", "Semester 1", "Semester 2", "Semester 2", 
"Semester 2", "Semester 2", "Semester 2", "Semester 2", "Semester 2", 
"Semester 2", "Semester 2", "Semester 2", "Semester 2", "Semester 2", 
"Semester 2", "Semester 2", "Semester 2", "Semester 2", "Semester 2", 
"Semester 2", "Semester 2", "Semester 2")), class = "data.frame", row.names = c(NA, 
-40L))

很高兴按照下面的方式对每年/学期进行硬编码,但不能对每个类进行硬编码,因为在我的真实数据集中有 1000 多个类。我的尝试如下:

df$enrols[df$year==2020 & df$term=="Semester 1"] = length(unique(df$class))

昨天问了这个问题并收到了一些有用的答案,但没有产生所需的输出。该问题随后被关闭,因此出现了新问题。

我所追求的是计算每个班级在某个学期和年份出现的次数。例如,在提供的 df 中,“Semester 1”和“2019”中带有“Art”的观察应该有一个带有“4”的列(“enrols”),因为“Art”在该年和学期中有 4 次出现。

标签: r

解决方案


使用 dplyr,您可以按年份、学期和班级分组,然后查找注册人数。

library(dplyr)
df %>% group_by(year, term, class) %>% mutate(enroll=n())
#   class year  term       enroll
#   <chr> <chr> <chr>       <int>
# 1 ART   2019  Semester 1      3
# 2 ART   2020  Semester 1      2
# 3 ART   2019  Semester 1      3
# 4 ART   2020  Semester 1      2
# 5 ART   2019  Semester 1      3
# 6 PE    2020  Semester 1      3

推荐阅读