为后续访问创建假人
Create dummies for followup visits
我有一个带有 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]
我有一个带有 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]