【问题标题】:Is there an R function that counts the number of previous number of dates in a data frame and based on condition是否有一个 R 函数可以根据条件计算数据框中先前日期的数量
【发布时间】: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,因为之前只有一个缺席。这是关于学生之前缺勤的次数,而不是总缺勤次数。

标签: r dataframe date count


【解决方案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)

【讨论】:

    猜你喜欢
    • 2022-01-19
    • 2014-12-07
    • 1970-01-01
    • 2019-03-17
    • 2020-02-05
    • 1970-01-01
    • 1970-01-01
    • 2023-01-08
    • 2021-05-02
    相关资源
    最近更新 更多