问题描述
我需要计算一个受罚的累积总和。
个人“A”、“B”和“C”应该每隔一年接受一次测试。每次他们接受测试,他们都会累积 1 分。但是,当他们错过考试时,他们的累积分数会被扣除 1 分。
我有以下代码:
data.frame(year = rep(1990:1995,3),person.id = c(rep("A",6),rep("B",rep("C",6)),needs.testing = rep(c("Yes","No"),9),test.compliance = c(c(1,1,0),c(1,0)),penalized.compliance.cum.sum = c(c(1,2,3,1),-1,-1)))
...给出以下内容:
year person.id needs.testing test.compliance penalized.compliance.cum.sum
1 1990 A Yes 1 1
2 1991 A No 0 1
3 1992 A Yes 1 2
4 1993 A No 0 2
5 1994 A Yes 1 3
6 1995 A No 0 3
7 1990 B Yes 1 1
8 1991 B No 0 1
9 1992 B Yes 1 2
10 1993 B No 0 2
11 1994 B Yes 0 1
12 1995 B No 0 1
13 1990 C Yes 1 1
14 1991 C No 0 1
15 1992 C Yes 0 0
16 1993 C No 0 0
17 1994 C Yes 0 -1
18 1995 C No 0 -1
很明显,“A”完全符合要求。 “B”有点符合(1994年他应该接受测试,但他错过了测试,因此他的累计金额从2减为1)。最后,“C”只符合了一次(1990 年,每次她需要接受测试,她都错过了测试)。
我需要一些代码来获取“penalized.compliance.cum.sum”变量。
请注意:
- 每隔一年进行一次测试。
- “penalized.compliance.cum.sum”变量不断增加之前的分数。
- 但只有当个人错过测试年度的测试(在“needs.testing”变量中表示)时才会开始扣除。
- 例如,个人“C”在 1990 年符合要求。在 1991 年她不需要接受测试,因此她的分数保持为 1。然后,她错过了 1992 年的测试,并且从她的累积分数中减去了 1 ,在 1992 年得了 0 分。然后她一直错过考试,在研究结束时得了 -1。
- 此外,我需要分配不同的惩罚(即不同的数字)。在此示例中,它只是 1。但是,我需要能够使用其他数字(例如 0.5、0.1 等)进行惩罚。
谢谢!
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)