R语言如何将同ID筛选期var2值重复填充到该ID所有行?
R语言按组填充指定行值的实现方法
以下是3种可直接运行的实现方案:
方法1:dplyr(tidyverse生态常用写法)
按ID分组后直接提取每组内screening访视对应的var2值,自动填充到组内所有行:
library(dplyr) df1 <- df1 %>% group_by(ID) %>% mutate(var3 = var2[visit == "screening"]) %>% ungroup()
如果需要适配更复杂的填充规则,也可以用ifelse+fill的组合实现:
df1 <- df1 %>% group_by(ID) %>% mutate(var3 = ifelse(visit == "screening", var2, NA)) %>% fill(var3, .direction = "downup") %>% ungroup()
方法2:base R(无需加载第三方包)
先构建ID与screening期var2的匹配表,再通过ID匹配填充全表:
# 生成查找表:仅保留每个ID的screening行 lookup <- df1[df1$visit == "screening", c("ID", "var2")] # 按ID匹配填充 df1$var3 <- lookup$var2[match(df1$ID, lookup$ID)]
方法3:data.table(大数据量下性能最优)
library(data.table) setDT(df1)[, var3 := var2[visit == "screening"], by = ID]
之前使用filter未得到正确结果的核心原因是filter会仅保留符合条件的行,丢失其余访视记录,需要将筛选得到的基准值与原表做关联匹配后再填充。
内容的提问来源于stack exchange,提问作者Walker
相关产品推荐
相关产品推荐

