我正在处理数据框df
如下:
Input:
TUserId SUID mid_sum final_sum
115 201 2 7
115 309 1 8
115 404 1 9
209 245 2 10
209 398 2 10
209 510 2 10
209 602 1 10
371 111 2 11
371 115 1 11
371 123 3 11
371 124 2 11
1-我的数据排列在wide
格式,其中每行都有一个唯一的学生 ID,显示为SUID
.
2- 多个学生可以拥有同一位教师,因此多行中的公共教师 ID 如下所示TUserId
.
3- 数据包括学生期中成绩和期末成绩。
4- 我有兴趣了解是否存在教师在期中考试中给学生提供相似分数的情况,如下所示mid_sum
期末考试的分数不一致,如下所示final_sum
。如果在数据中发现这种不一致,我想添加一列Status
记录了这个inconsistency
.
要求:
a- 为此,我的规则是,如果mid_sum
and final_sum
按升序排序,正如我在此示例数据框中所做的那样df
。我想确定升序序列在这两列中中断的情况mid_sum
and final_sum
.
b- 如果数据未排序,可以完成吗?
示例1:
例如,对于SUID = 309
, mid_sum
是比之前的减量mid_sum
。所以应该标记为inconsistent
。这只应该发生在由同一位老师评分的学生身上TUserId
,在本例中是115
.
示例2:
同样,对于SUID = 602
, mid_sum
是比之前的减量mid_sum
。所以应该标记为inconsistent
。又是同一个老师的TUserId = 209
为了进一步详细说明,我想要这样的输出:
Output:
TUserId SUID mid_sum final_sum Status
115 201 2 7 consistent
115 309 1 8 inconsistent
115 404 1 9 consistent
209 245 2 10 consistent
209 398 2 10 consistent
209 510 2 10 consistent
209 602 1 10 inconsistent
371 111 2 11 consistent
371 115 1 11 inconsistent
371 123 3 11 consistent
371 124 2 11 inconsistent
数据导入dput()
The dput()
数据框如下:
dput(df)
structure(list(
TUserId = c(115L, 115L, 115L, 209L, 209L, 209L, 209L, 371L, 371L, 371L, 371L),
SUID = c(201L, 309L, 404L, 245L, 398L, 510L, 602L, 111L, 115L, 123L, 124L),
mid_sum = c(2L, 1L, 1L, 2L, 2L, 2L, 1L, 2L, 1L, 3L, 2L),
final_sum = c(7L, 8L, 9L, 10L, 10L, 10L, 10L, 11L, 11L, 11L, 11L)),
class = "data.frame", row.names = c(NA, -11L))
我在 SO 上寻找类似的问题并发现了这个R - 识别连续序列 https://stackoverflow.com/questions/31439273/r-identify-consecutive-sequences但这似乎并不能帮助我解决我的问题。
另一个相关帖子是确定 R 中的数字序列何时被破坏 https://stackoverflow.com/questions/31462438/determine-when-a-sequence-of-numbers-has-been-broken-in-r但同样,这对我的情况没有帮助。
任何有关如何解决此问题的建议将不胜感激。
Thanks!