R语言面板数据按ID分组替换变量为组内首个值的实现方法
R按分组首值替换全组变量的实现方案
针对大数据集,优先使用经过性能优化的分组运算方案,手动写for循环运行效率会低很多,不推荐使用。以下是三种主流实现方案:
- 大数据集首选
data.table方案(性能最高)data.table是R中专门针对高性能数据操作优化的包,百万级以上行数据运行速度远快于其他方案:
# 加载包 library(data.table) # 将数据框转为data.table格式,该操作不会复制数据,效率极高 setDT(dta) # 按id分组,将每组的intm替换为组内第一个值 dta[, intm := first(intm), by = id] # 如果后续需要用普通数据框格式,运行下方代码即可转换 # setDF(dta)
- 代码可读性优先选
dplyr方案
如果数据集规模不算特别极端,更看重代码易读性,可以用tidyverse体系的dplyr实现:
library(dplyr) dta <- dta %>% group_by(id) %>% mutate(intm = first(intm)) %>% ungroup()
- 无依赖的基础R实现
如果不想加载任何第三方包,可以用基础R内置的ave函数实现,无需手动写循环:
dta$intm <- ave(dta$intm, dta$id, FUN = function(x) x[1])
内容的提问来源于stack exchange,提问作者Tom
相关产品推荐
相关产品推荐

