是否有一个 R 函数可以根据条件计算数据框中先前日期的数量
Posted
技术标签:
【中文标题】是否有一个 R 函数可以根据条件计算数据框中先前日期的数量【英文标题】:Is there an R function that counts the number of previous number of dates in a data frame and based on condition 【发布时间】:2022-01-16 07:22:21 【问题描述】:我想计算每个学生在最近一次缺勤之前的缺勤次数,并将这些计数作为一列添加到数据框中。
Student ID Absent Date Subject
4567 08/30/2018 M
4567 09/22/2019 M
8345 09/01/2019 S
8345 03/30/2019 PE
8345 07/18/2017 M
5601 01/08/2019 SS
这是所需的输出:
Student ID Absent Date Subject Previous Absence
4567 08/30/2018 M 1
4567 09/22/2019 M 1
8345 09/01/2019 S 2
8345 03/30/2019 PE 2
8345 07/18/2017 M 2
5601 01/08/2019 SS 0
然后,我想计算每个学生之前的数学缺勤次数 (M),并将这些计数作为一列添加到数据框中。
Student ID Absent Date Subject Previous Absence
4567 08/30/2018 M 1
4567 09/22/2019 M 1
8345 09/01/2019 S 2
8345 03/30/2019 PE 2
8345 07/18/2017 M 2
5601 01/08/2019 SS 0
想要的输出:
Student ID Absent Date Subject Prior Absence Prior M Absence
4567 08/30/2018 M 1 1
4567 09/22/2019 M 1 1
8345 09/01/2019 S 2 0
8345 03/30/2019 PE 2 0
8345 07/18/2017 M 2 0
5601 01/08/2019 SS 0 0
谢谢!
【问题讨论】:
您能澄清一下您想要的输出中的“Prior M Absence”吗?对于学生 ID 8345,数学缺勤发生在 2017 年,在其他缺勤之前,但“Prior M Absence”的值为零。那是因为这个值只反映了过去没有的数学课吗?还是打算将 2017 年 7 月 18 日的日期晚于该学生的其他缺勤日期? @Ben 你好! “Prior M Absence”是仅包含以前数学缺勤的列。所以在这种情况下,它是 0,因为学生 8345 只缺席了 1 次数学,这意味着他们以前从未缺席过任何数学。如果学生 8345 的 3 次缺勤中有 2 次是数学,那么“Prior M Absence”输出将为 1。我希望这是有道理的:) 为什么第 2 行中 ID 4567 的前一个不存在 == 1 而不是 2?这不是他第二次缺席吗?? 你好@Onyambu!它是 1,因为之前只有一个缺席。这是关于学生之前缺勤的次数,而不是总缺勤次数。 【参考方案1】:这假设数据已经按Absent_Date
排序(至少在每个Student_ID
内):
library(dplyr)
df %>%
group_by(Student_ID) %>%
mutate(
n_prior_absence = n() - 1,
n_prior_absence_math = sum(head(Subject, -1) == "M")
)
# # A tibble: 6 × 5
# # Groups: Student_ID [3]
# Student_ID Absent_Date Subject n_prior_absence n_prior_absence_math
# <int> <chr> <chr> <dbl> <int>
# 1 4567 08/30/2018 M 1 1
# 2 4567 09/22/2019 M 1 1
# 3 8345 09/01/2019 S 2 0
# 4 8345 03/30/2019 PE 2 0
# 5 8345 07/18/2017 M 2 0
# 6 5601 01/08/2019 SS 0 0
使用这些数据:
df = read.table(text = 'Student_ID Absent_Date Subject
4567 08/30/2018 M
4567 09/22/2019 M
8345 09/01/2019 S
8345 03/30/2019 PE
8345 07/18/2017 M
5601 01/08/2019 SS', header = T)
【讨论】:
以上是关于是否有一个 R 函数可以根据条件计算数据框中先前日期的数量的主要内容,如果未能解决你的问题,请参考以下文章