我有下表:
Name Date Score
John 11-01-02 40
John 11-01-03 47
John 11-01-04 41
John 11-01-05 35
John 11-01-06 52
John 11-01-07 47
John 11-01-08 45
John 11-01-09 43
John 11-01-10 40
Adam 11-01-02 41
Adam 11-01-03 41
Adam 11-01-04 49
Adam 11-01-05 40
Adam 11-01-06 40
我只想跟踪以下事件:对于每个学生,跟踪学生何时以及多少次出现以下情况:1)分数增加5或更多,然后分数减少5或更多或2)分数降低5分或更多,然后得分提高5分或更多。
我制作了下表来帮助完成上述任务:每个学生的分数之间的差异表。
Name Date Difference
John 11-01-03 7
John 11-01-04 -6
John 11-01-05 -6
John 11-01-06 17
John 11-01-07 -5
John 11-01-08 -2
John 11-01-09 -2
John 11-01-10 -3
Adam 11-01-04 8
Adam 11-01-05 -9
Adam 11-01-06 0
例如,在03年11月1日,约翰的得分从11年11月1日的40分上升到47分,因此相差47-40 = 7。
我想要下表作为输出:
记录事件的名称,日期的一种
Name Dates for Events
John 11-01-03
John 11-01-05
John 11-01-06
Adam 11-01-04
在03年1月1日,约翰经历了7分的变化,随后是-6分,因此约翰经历了我描述的事件。由于相同的原因,其他日期也包括在内。
在R中有一个简单的方法吗?任何帮助将不胜感激。
使用的一种选择dplyr
可能是:
data %>% group_by(Name) %>%
mutate(diff = lead(Score) - Score,
score_increase_5 = ifelse(diff >= 5, TRUE, FALSE),
score_decrease_5 = ifelse(diff <= -5, TRUE, FALSE)) %>%
filter(!is.na(diff)) %>%
mutate(event = ((score_decrease_5 & lag(score_increase_5)) |
(score_increase_5 & lag(score_decrease_5)))) %>%
filter(event) %>%
select(Name, Date)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句