请求将指定Stata命令转换为R代码以复现回归分析
Stata转R代码方案
原Stata命令逻辑拆解
1. 数据聚合(collapse命令)
- 分组依据:
city、id、sic、after四个变量 - 聚合规则:
varA:取分组内最大值- 以下变量取分组内均值:
VarB、one、two、three、four、five、p、rel、所有以ww开头的变量、所有以aa开头的变量、r_wk
2. 数据清洗命令
- 将
year变量转换为整数类型 - 当
emp变量缺失时,把lemp设为-99 - 删除已存在的
lempm变量(如果有),再生成新的lempm变量:lemp等于-99时为TRUE,否则为FALSE
对应的R代码实现(使用dplyr包)
先安装并加载dplyr:
# 安装dplyr(未安装时执行) install.packages("dplyr") # 加载dplyr library(dplyr)
1. 数据聚合(对应Stata的collapse)
df_aggregated <- df %>% group_by(city, id, sic, after) %>% summarise( varA = max(varA, na.rm = TRUE), # 取最大值,忽略缺失值 # 单个变量取均值 across(c(VarB, one, two, three, four, five, p, rel, r_wk), ~mean(.x, na.rm = TRUE)), # 所有以ww开头的变量取均值 across(starts_with("ww"), ~mean(.x, na.rm = TRUE)), # 所有以aa开头的变量取均值 across(starts_with("aa"), ~mean(.x, na.rm = TRUE)), .groups = "drop" # 聚合后取消分组状态 )
注:
na.rm = TRUE对应Stata默认处理缺失值的逻辑,若原命令不需要忽略缺失值,可删除该参数。
2. 转换year为整数
df_aggregated <- df_aggregated %>% mutate(year = as.integer(year))
3. 处理lemp与生成lempm
df_aggregated <- df_aggregated %>% mutate( lemp = ifelse(is.na(emp), -99, lemp), # emp缺失时将lemp设为-99 lempm = lemp == -99 # 生成lempm变量 )
注:R中
mutate会直接覆盖已存在的lempm变量,等效于Stata的cap drop + gen操作。
完整整合代码
install.packages("dplyr") library(dplyr) # 一站式完成聚合+清洗 df_aggregated <- df %>% group_by(city, id, sic, after) %>% summarise( varA = max(varA, na.rm = TRUE), across(c(VarB, one, two, three, four, five, p, rel, r_wk), ~mean(.x, na.rm = TRUE)), across(starts_with("ww"), ~mean(.x, na.rm = TRUE)), across(starts_with("aa"), ~mean(.x, na.rm = TRUE)), .groups = "drop" ) %>% mutate(year = as.integer(year)) %>% mutate( lemp = ifelse(is.na(emp), -99, lemp), lempm = lemp == -99 )
内容的提问来源于stack exchange,提问作者Phil
相关产品推荐
相关产品推荐

