gpt4 book ai didi

r - 如何捕捉到第一个事件的时间?

转载 作者:行者123 更新时间:2023-12-04 11:07:39 27 4
gpt4 key购买 nike

假设我有一个像这样的数据框:

set.seed(123)
df<-data.frame(id=rep(LETTERS[1:3],each=4),
days=as.integer(rnorm(12,100,10)),
event=rbinom(12,1,0.3))
df<-df[with(df,order(id,days)),]
df$event[sample(3,1:12,T)]<-NA
df[2,3]<-0
df
id days event
1 A 94 0
2 A 97 0
4 A 100 NA
3 A 115 0
8 B 87 1
5 B 101 0
7 B 104 1
6 B 117 0
9 C 93 0
10 C 95 1
12 C 103 0
11 C 112 0

我如何通过忽略 NA 来捕获第一个 event=1days,如果没有事件则返回最大天数,这样:

df2
id days event
3 A 115 0
8 B 87 1
10 C 95 1

最佳答案

这被压缩成一行并使用data.table:

require(data.table) ## >= 1.9.2
setDT(df)[, min(days[event==1], max(days), na.rm=TRUE), by=id]

它按要求工作,但我仍然建议您将其拆分为两个(遇到事件和未遇到事件)并合并表。这依赖于 min() 在给定长度为 0 的向量时返回 Inf。在这种情况下,max(days) 开始。

setDT 通过引用将 data.frame 转换为 data.table

关于r - 如何捕捉到第一个事件的时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23135216/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com