R数据框中按分组ID重复时变变量首行值的实现方法
解决方案:按分组替换时变变量为组内首行值,保留其他变量原始值
你可以直接用dplyr的分组+赋值操作实现需求,无需手动重复行,完美保留t3的原始值:
library(dplyr) # 原始数据 id <- c(1,1,2,2,2,3,3,3) x <- c(0,0,1,1,1,1,1,1) t1 <- c(1,0,1,1,0,0,1,0) t2 <- c(2.1,1.5,1.7,2.0,2.0,2.8,2.1,2.1) t3 <- c(21,18,23,26,27,25,31,22) df <- data.frame(id, x, t1, t2, t3) # 核心处理代码 df_result <- df %>% group_by(id) %>% mutate( t1 = first(t1), # 将每组t1替换为组内第一行的t1值 t2 = first(t2) # 将每组t2替换为组内第一行的t2值 ) %>% ungroup() # 取消分组(可选,根据后续操作需求决定) # 查看结果 print(df_result)
运行后输出结果与预期完全一致:
# A tibble: 8 × 5 id x t1 t2 t3 <dbl> <dbl> <dbl> <dbl> <dbl> 1 1 0 1 2.1 21 2 1 0 1 2.1 18 3 2 1 1 1.7 23 4 2 1 1 1.7 26 5 2 1 1 1.7 27 6 3 1 0 2.8 25 7 3 1 0 2.8 31 8 3 1 0 2.8 22
关键说明
group_by(id):按id对数据分组,后续操作仅在组内生效first(t1):提取当前分组中t1列的第一个元素,dplyr的first()函数会自动忽略缺失值(如果有),如果需要严格取第一行,也可以用t1[1]替代- 整个过程不会修改
x和t3的原始值,完全符合需求,且无需手动设置重复次数,适合大数据量处理
内容的提问来源于stack exchange,提问作者T Richard
相关产品推荐
相关产品推荐

