使用ACS PUMS数据实现Stata代码转R:创建flag标识与新变量
ACS PUMS数据Stata代码转R实现方案
1 flag标识变量的创建说明
R中不存在特殊的「flag标识变量」类型,你理解的flag本质就是指示符合特定条件的二元变量,用逻辑型(TRUE/FALSE)或0/1整数型都可以实现,和普通变量创建规则完全一致。
你之前的代码将结果转为因子没有必要,而且不符合后续求和的使用需求,正确的worker变量创建代码如下:
基础R实现
# 生成1/0标识,WKL为"1"时取1,其余取0 2019PUMS$worker <- as.integer(2019PUMS$WKL == "1") # WKL为空时赋值为缺失值 2019PUMS$worker[2019PUMS$WKL == ""] <- NA
dplyr实现(更推荐用于数据处理流程)
library(dplyr) 2019PUMS <- 2019PUMS %>% mutate(worker = case_when( WKL == "1" ~ 1, WKL == "" ~ NA_integer_, TRUE ~ 0 ))
2 按家庭SERIALNO分组计算务工人数wihh
对应Stata的by serialno, sort: egen wihh=sum(worker)逻辑,R中用分组汇总后赋值即可:
基础R实现
2019PUMS$wihh <- ave(2019PUMS$worker, 2019PUMS$SERIALNO, FUN = function(x) sum(x, na.rm = TRUE))
dplyr实现(代码可读性更高)
2019PUMS <- 2019PUMS %>% group_by(SERIALNO) %>% mutate(wihh = sum(worker, na.rm = TRUE)) %>% ungroup()
补充说明
如果需要worker为逻辑型flag,直接去掉as.integer即可,逻辑值TRUE在求和时会自动被识别为1,FALSE识别为0,不影响后续wihh的计算结果。
内容的提问来源于stack exchange,提问作者Rafael Gonzalez
相关产品推荐
相关产品推荐

