我有一个简单的数据结构,包含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
我们可以检查当前行是否是每组中的最后一行。在基本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]