【发布时间】:2020-11-07 04:11:10
【问题描述】:
我有一个这样的data.frame:
dat <- data.frame("ID"=c(rep(1,13),rep(2,5)), "time"=c(seq(1,13),c(seq(1,5))), "value"=c(rep(0,5), rep(1,3), 2, 0, 1, 5, 20, rep(0,2), seq(1:3)))
ID time value
1 1 1 0
2 1 2 0
3 1 3 0
4 1 4 0
5 1 5 0
6 1 6 1
7 1 7 1
8 1 8 1
9 1 9 2
10 1 10 0
11 1 11 1
12 1 12 5
13 1 13 20
14 2 1 0
15 2 2 0
16 2 3 1
17 2 4 2
18 2 5 3
我的目标是将所有值设置为0,如果在剩余的值中有任何其他0(对于每个唯一的ID 并按time 排序)。这意味着在示例数据中,我希望 0 在行 6:9 中。
我尝试了dat %>% group_by(ID) %>% mutate(value2 = ifelse(lead(value, order_by=time)==0, 0, value)),但我必须运行几次,因为它一次只更改一行(即先更改第 9 行,然后是第 8 行,等等)。
dplyr 解决方案会更受欢迎,但我会接受所有可行的方法:)
简短的解释:值是肿瘤的大小。如果肿瘤没有变大,但后来实际上完全消失了,很可能是不相关的包裹,因此应编码为“零肿瘤”。
【问题讨论】: