我正在尝试根据事件的发生率替换数据框中的值。在列中,exp_recode
我显示了所需的输出。time_point
显示事件时间,以指示该事件在events
列中的时间顺序。我想将z
感兴趣的事件之后的任何事件重新编码为0 。请注意,存在重复id
的,因为它们是纵向数据。
如果您想知道为什么以后要重新编码/标记事件z
,我打算将其删除,因为这些事件不是我感兴趣的事件。但是我不想在分析的这个阶段删除它们。
id <- c(rep(1, 6),rep(2,4))
time_point <- c(1:6, 1:4)
event <- c("b","b","c","z", "d", "a", "e", "b", "z", "d")
exp_recode<- c(c("b","b","c","z", 0, 0, "e", "b", "z", 0))
df <- data.frame(id, time_point, event, exp_recode)
df
id time_point event exp_recode
1 1 1 b b
2 1 2 b b
3 1 3 c c
4 1 4 z z
5 1 5 d 0
6 1 6 a 0
7 2 1 e e
8 2 2 b b
9 2 3 z z
10 2 4 d 0
尝试by
。(花了我一段时间,因为我一直在尝试ave
,忘记了它返回一个数值向量。)
fun <- function(x){
x <- as.character(x)
i <- min(which(x == "z"))
x[seq_along(x)[-seq_len(i)]] <- 0
x
}
df$exp_recode2 <- unlist(by(df$event, df$id, FUN = fun))
df
我敢打赌,有一种更简单的dplyr
方法可以做到这一点,但是这种方法R
仅使用base 。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句