R dataframe按ID分组计算各访视x值相对筛查行的差值方法
R实现按ID分组计算各访视相对于筛查行的差值
示例数据集
set.seed(123) df1 <- 0 df1$visit <- rep(c("scr", "1mo", "3mo", "6mo0", "12mo", "2yr"), 2) df1 <- as.data.frame(df1) df1$id <- rep(c("101","102"), each = 6) df1 <- df1[ ,-c(1)] df1$x <- sample(0:30, 12, replace = T) df1$want = c(0, -16, -12, -17, -28, -21, 0, 4, -7, -13, 2, -4)
需求说明
对每个ID分组,将分组内所有行的x值减去该ID对应筛查(visit为scr)行的x值,生成相对于筛查访视的变化变量。
可复用代码方案
方案1:dplyr实现(推荐,代码简洁易读)
library(dplyr) df1 <- df1 %>% group_by(id) %>% mutate(x_change_from_scr = x - x[visit == "scr"]) %>% ungroup()
运行后生成的x_change_from_scr列和示例给出的want列完全一致。
方案2:基础R实现(无需加载第三方包)
# 先提取每个ID对应的筛查值 scr_val_df <- aggregate(x ~ id, data = df1[df1$visit == "scr", ], FUN = c) # 匹配ID后计算差值 df1$x_change_from_scr <- df1$x - scr_val_df$x[match(df1$id, scr_val_df$id)]
内容的提问来源于stack exchange,提问作者Walker
相关产品推荐
相关产品推荐

