如何基于相同Subject ID将单元格值复制到同组内其他对应行
解决方案1:直接取分组内Period=1的取值(推荐)
直接按Date和Subject分组后,取分组内Period=1对应的Skill值覆盖整组的Skill列即可,逻辑简单直接,不依赖数据行顺序,适配你的需求:
library(dplyr) result <- df %>% group_by(Date, Subject) %>% mutate(Skill = Skill[Period == 1]) %>% ungroup()
解决方案2:修正na.locf用法
你之前用na.locf的问题在于没有保证分组内的行是按Period升序排列的,补充排序步骤即可正常生效:
library(dplyr) library(zoo) result <- df %>% group_by(Date, Subject) %>% arrange(Period, .by_group = TRUE) %>% # 确保分组内按Period从小到大排序 mutate(Skill = na.locf(Skill)) %>% ungroup()
两种方法都可以得到你需要的输出结果,第一种方案更贴合你的明确规则,容错率更高。
内容的提问来源于stack exchange,提问作者Matthias Herrmann
相关产品推荐
相关产品推荐

