这是我之前提出的 R 问题的扩展:如何在R中选择组内具有特定值的行 https://stackoverflow.com/questions/55853841/how-to-select-rows-with-certain-values-within-a-group-in-r
我在这个问题上得到了很大的帮助,但现在变得有点复杂了,我希望收到如何处理这个问题的建议。
我的数据如下所示:
dd <- read.table(text="
event.timeline.ys ID year group outcome
1 2 800033 2008 A 3
2 1 800033 2009 A 3
3 0 800033 2010 A NA
4 -1 800033 2011 A 2
5 -2 800033 2012 A 1
15 0 800076 2008 B 2
16 -1 800076 2009 B NA
17 5 800100 2014 C 4
18 4 800100 2015 C 4
19 2 800100 2017 C 4
20 1 800100 2018 C 3
30 0 800125 2008 A 2
31 -1 800125 2009 A 1
32 -2 800125 2010 A NA
33 2 800031 2008 A 3
34 1 800031 2009 A 3
35 0 800031 2010 A NA
36 -1 800031 2011 A NA
37 -2 800031 2012 A 1", header=TRUE)
我只想选择组(ID)中的特殊行。应根据以下过程选择这些行:
如果可能的话,我想为每个参与者保留 event.timeline.ys 上具有正值的最后一行(即,event.timeline.ys >= 0 的 ID 组中的最后一行),其中结果变量不是不适用,但具有有效值(例如,对于 ID == 800033,这将是第 2 行)。
此外,我想为每个参与者保留 event.timeline.ys 上具有负值的第一行(即 ID 组中 event.timeline.ys
在 ID == 800076 的特殊情况下,当 event.timeline.ys
ID = 800100 的人在 event.timeline.ys 上没有任何负值。在这种情况下,我想只保留 event.timeline.ys >= 0 的最后一行。
所有其他行都应删除。最终的数据框如下所示:
event.timeline.ys ID year group outcome
2 1 800033 2009 A 3
4 -1 800033 2011 A 2
15 0 800076 2008 B 2
16 -1 800076 2009 B NA
20 1 800100 2018 C 3
30 0 800125 2008 A 2
31 -1 800125 2009 A 1
34 1 800031 2009 A 3
37 -2 800031 2012 A 1
我非常感谢关于如何解决这个问题的建议。我已经尝试过这个:
dd %>%
group_by(ID) %>%
filter(row_number() == last(which(event.timeline.ys >= 0 & outcome >= 0)) |
row_number() == first(which(event.timeline.ys < 0 & outcome >= 0)))
然而,我随后丢失了第 16 行(ID == 800076),这是不幸的。
提前谢谢了!