【发布时间】:2019-04-25 16:29:49
【问题描述】:
我正在 R 中训练自己的循环和函数(但目前处于非常基础的水平)。对于最近的一项研究,我需要准备以下数据:
我有一个如下所示的数据集:
dd <- read.table(text="
event.timeline.ys ID year group
1 2 800033 2008 A
2 1 800033 2009 A
3 0 800033 2010 A
4 -1 800033 2011 A
5 -2 800033 2012 A
15 0 800076 2008 B
16 -1 800076 2009 B
17 5 800100 2014 C
18 4 800100 2015 C
19 2 800100 2017 C
20 1 800100 2018 C
30 0 800125 2008 A
31 -1 800125 2009 A
32 -2 800125 2010 A", header=TRUE)
我想为每个人只保留 event.timeline.ys >= 0 的 last 行(这将是 ID 800033 的第 3 行)和 first event.timeline.ys
ID = 800100 的人在 event.timeline.ys 上没有任何负值。在这种情况下,我只想保留 event.timeline.ys >= 0 的最后一行。
最终的数据集将如下所示:
event.timeline.ys ID year group
3 0 800033 2010 A
4 -1 800033 2011 A
15 0 800076 2008 B
16 -1 800076 2009 B
20 1 800100 2018 C
30 0 800125 2008 A
31 -1 800125 2009 A
我考虑过使用 for 循环在每个 ID 中检查 last 行的 event.timeline.ys >= 0 和 first 行的事件。时间线.ys
有人有明智的建议吗?我也对不基于 for 循环或类似东西的其他解决方案持开放态度。
【问题讨论】: