首页 > 解决方案 > 为后续访问创建假人

问题描述

我有一个带有 id 和时间序列指标 (prd) 的简单数据结构。我想为后续就诊“fup”创建一个虚拟变量,如果患者没有更多就诊,则等于 0,如果患者将来有更多就诊,则等于 1。

我该怎么做呢?

id<- c(1, 1, 1, 2, 3, 3)
prd <- c(1, 2, 3, 1, 1, 2)

df <- data.frame(id=id, prd=prd)

期望的输出:

  id prd fup
1  1   1   1
2  1   2   1
3  1   3   0
4  2   1   0
5  3   1   1
6  3   2   0

标签: rpanel

解决方案


我们可以检查当前行是否是每个组中的最后一行。在基础 R 中,

df$fup <- with(df, ave(prd, id, FUN = function(x) seq_along(x) != length(x)))
df

#  id prd fup
#1  1   1   1
#2  1   2   1
#3  1   3   0
#4  2   1   0
#5  3   1   1
#6  3   2   0

同样在dplyr,

library(dplyr)
df %>%  group_by(id) %>%  mutate(fup = +(row_number() != n()))

data.table

library(data.table)
setDT(df)[, fup := +(seq_along(prd) != .N), by = id]

推荐阅读