快餐,因果关系和R包,part 2

5月3日,二千零一十九
通过

(本文首次发表于 计量经济学和自由软件,并对 188bet appR博主


我目前正在为R编程语言开发一个包;最初的目标是
分发卡和Krueger 1994纸张中使用的数据,您可以阅读
在这里(PDF警告)。However,我决定
将添加代码以执行diff-in-diff。

在我的上一篇博客文章我展示
如何设置新包的结构。在这篇博文中,I will only focus on getting
Card and Krueger's data and prepare it for distribution.下一篇博文将重点放在写作上。
a function to perform difference-in-differences.

如果要通过包分发数据,你首先需要使用usethis::使用_data_raw()。
功能(如第1部分所示)。

这创造了一个原始数据folder,在里面你会发现数据集R脚本。你可以编辑这个
编写脚本以准备数据。

第一,让我们从卡的网站下载数据,解压它并将数据加载到R中。All these
操作将从R开始:

library(tidyverse)tempfile_path<-tempfile()download.file(“http://davidcard.berkeley.edu/data_set/njmin.zip”,destfile=tempfile_path)tempdir_path<-tempdir()unzip(tempfile_path,exdir=tempdir_路径)

要从R下载并解压缩文件,第一,you need to define where you want to save the file.因为
我对保存下载的文件不感兴趣,我用TestFILL()获取临时
文件在我的TMP/TMP/文件夹(在GNU+Linux中包含临时文件和文件夹的文件夹
系统)。然后,使用下载文件()我下载文件,并保存在我的临时文件中。然后我
使用创建临时目录Twitter()(这个想法和TestFILL())使用
此文件夹用于保存要解压缩的文件,使用unZip()功能。此文件夹现在包含
几个文件:

支票.sascodebookpublic.csvread.mesurvey1.njsurvey2.nj

检查是否使用SAS脚本卡和Krueger。很有趣,因为这很简单,
相当短(170行长),但卡德和克鲁格的研究的影响过去和现在都是
对计量经济学领域非常重要。这个脚本将帮助我定义自己的函数。
码本,你猜对了,包含变量的说明。我用这个来命名列
并编写数据集的文档。

公共广播电台is the data.它不包含任何列名称:

46 1 0 0 0 0 1 0 0 30.00 15.00 3.00.19。1.2 6.50 16.50 1.03 1.03 0.52 3 3 1 111792 1 3.50 35.00 3.00 4.30 26.0 0.08 1 2 6.50 16.50 1.03。0.94  4  4     49 2 0 0 0 0 0 1 0 0  0  6.50  6.50  4.00.26.0.0。2 10.00 13.00 1.01 0.90 2.35 4 3 1 111292.0.00 15.00 4.00 4.45 13.0 0 0.05 0 2 10.00 13.00 1.01 0.89 2.35 4 506 2 1 0 0 0 0 1 0 0 0 3.00 7.00 2.00。13.0 0.37 0 30.0 2 11.00 10.00 0.95 0.74 2.33 3 1 111292。3.00 7.00 4.00 5.00 19.0 0.25.1 11.00 11.00 0.95 0.74 2.33 4 3 56 4 1 0 0 0 0 0 0 1 0 0 0 20.00 20.00 4.00 5.00 26.0 0 0.10 1 0.0 2 10.00 12.00 0.87 0.82 1.79 2 1 111492.0.00 36.00 2.00 5.25 26.0 0 0.15 0 2 10.00 12.00 0.92 0.79 0.87 2 61 4 1 0 0 0 0 1 0 0 0 6.00 26.00 5.00 5.50 52.0 0.15 1 0.0 3 10.00 12.00 0.87 0.77 1.65 2 1 111492。28.00 3.00 6.00 4.75 13.0 0 0.15 0 2 10.00 12.00 1.01 0.84 0.95 2 62 4 1 0 0 0 0 0 1 0 0 2 0.00 31.00 5.00 5.00 26.0 0 0.07 0 45.0 2 10.00 12.00 0.87 0.77 0.95 2 1 111492.....26.0.0 2 10.00 12.00.0.84 1.79 3 3 3

缺少的数据由定义.分隔符是空格。读我是自述文件。
最后,测量师勘测Ⅱ对快餐进行的调查
餐厅经理;一个在2月(加薪前),另一个在11月金宝搏网址
(在最低工资上涨之后)。

下一行导入代码簿:

代码簿<-读取行(文件=Paste0(tempdir_路径,“/codebook”))变量名<-codebook%>%`[`(8:59)%>%`[`(-c(5,6,13,14,32,33))%>%str_sub(1,13) %>%    str_squish() %>%    str_to_lower()

一旦我导入代码本,我使用'[()功能。
如果你不熟悉这个符号,在控制台中尝试以下操作:

SEQ(1)100)[1:10]
##[1]1 2 3 4 5 6 7 8 9 10

并进行比较:

SEQ(1)100) %>%   `[`(.,1:10)
##[1]1 2 3 4 5 6 7 8 9 10

两者都是等效的,正如你所看到的。您还可以尝试以下操作:

1 + 10
α〔1〕11
1%>%`+(。10)
α〔1〕11

用同样的方法,我去掉了不需要的线条,然后使用字符串::str_sub(1,13)
我只保留前13个字符(变量名,加上一些空格字符)
然后,删除我使用的所有不需要的空白字符字符串::squish()),然后
将列名更改为小写。

I then load the data,并添加我之前提取的列名称:

数据集<-read_table2(paste0(tempdir_path,“/公共。DAT”)col_name=false)dataset<-dataset%>%select(-x47)%>%` col names<-`(.,变量名)%>%全部变异(as.numeric)%>%全部变异(sheet=as.character(sheet))

我用的技巧和以前一样。我重新命名第47列,它是空的,
我将列命名为'COLMENS <-().

在此之后,我做了一些数据清理。主要是重新命名分类变量的类别,
并创建“真”面板格式。在几个时间点测量了几个变量。变量
第二次测量的结果在他们名字的末尾有一个“2”。我去掉这些变量,
并添加一个观测数据变量。所以我的数据是原始数据的两倍,但是
这种格式使使用起来更容易。下面您可以阅读完整的代码:

如果要查看代码,请单击

数据集<-dataset%>%突变(chain=case_when(chain==1~“bk”,链==2~“KFC”,链==3~“罗伊斯”,链==4~“Wendys”))%>%突变(状态=case_when(状态==1~“新泽西”,state==0~“宾夕法尼亚”))%>%突变(region=case_when(southj==1~“southj”,centralj==1~“中心”,北j==1~“北j”,shore==1~“shorej”,pa1==1~“pa1”,pa2==1~“pa2”))%>%突变(饭菜=case_when(饭菜=0~“无”,餐费==1~“免费餐费”,餐费==2~“低价餐费”,餐费==3~“免费和低价餐费”))%>%变异(meals2=案例时(meals2==0~“无”,meals2==1~“免费餐”,meals2 == 2 ~ "Reduced price meals",meals2==3~“免费和特价餐”))%>%变异(状态2=case_when(状态2==0~“拒绝第二次面试”,状态2==1~“已回答第二次面试”,状态2==2~“装修关闭”,状态2==3~“永久关闭”,状态2==4~“公路施工关闭”,状态2==5~“因商场火灾关闭”))%>%突变(共有=如果其他(共有=1,“是的”“否”))%>%变异(奖金=如果其他(奖金=1,“是的”“否”))%>%突变(特殊2=如果其他(特殊2=1,“是的”"No")) %>%    mutate(type2 = if_else(type2 == 1,“电话”,“个人”))%>%选择(工作表,链,共有状态,区域,everything())%>%选择(-southj,-中央-诺斯杰,海岸,-PA1,-pa2)%>%突变(date2=lubridate::mdy(date2))%>%重命名(open2=open2r)%>%重命名(firstinc2=firstin2)dataset1<-dataset%>%选择(-ends_with(“2”),纸页,链,-co_owned,-状态,-区域,-奖金)%>%变异(类型=不带字符u,状态=无字符date=na)dataset2<-dataset%>%select(ends_with(“2”))%>%mutate(bonus=na_character_u)%>%rename_all(~str_remove(..“2”))其他列<-数据集%>%选择(工作表,链,共有状态,区域,奖金)其他变异(observation=“1992年2月”)其他变异(observation=“1992年11月”)数据集1<-绑定变异(其他变异,金宝搏网址数据集1)数据集2<-绑定列(其他列2,dataset2)njmin<-绑定行(dataset1,数据集2)%>%选择(工作表,链,状态,区域,观察,所有)()

这条线我想评论如下:

DataSet%>%选择(-ends_with(“2”),纸页,链,-co_owned,-状态,-区域,-bonus)

此选择将删除以字符“2”结尾的每一列(以及其他列)。我拆分数据
二,然后将行绑定在一起,从而创建我的长数据集。然后我保存数据
进入data/folder:

使用此::使用_数据(njmin,覆盖=真)

这将数据保存为RDA文件。To enable users to read the data by typing数据(“NJmin”)
您需要创建一个数据R脚本在R/文件夹。你可以读懂我的数据R脚本如下:

如果要查看代码,请单击

#“卡和克鲁格1994年论文的数据*最低工资和就业率:新泽西州和宾夕法尼亚州快餐业的案例研究”355;“该数据集经David Card许可下载和分发。原始数据包含410个观察值和46个变量。这个包中分布的数据完全相同,但从宽数据集改为长数据集,它更适合于使用tidyverse*函数进行操作。'@使用820行和28个变量来格式化数据框:‘\ item \ code sheet sheet number(唯一的商店ID)。‘\ item \ code chain fastfood chain:bk is burger king,肯德基是肯德基炸鸡,温迪是温迪的,Roys是Roy Rogers.‘\ item \ code state state餐厅所在地。‘\ item \ code region pa1是菲拉的东北郊区,Pa2是伊斯顿等,centralj is central NJ,Northj是新泽西州北部,SouthJ位于新泽西州南部。‘\项目\代码观察第一次(1992年2月)和第二次(1992年11月)观察日期。‘\项目\代码“是”,如果公司拥有。‘\项目\代码NCALS回电次数。金宝搏网址Is 0 if contacted on first call.}#'   \item{\code{empft}}{Number full-time employees.}#'   \item{\code{emppt}}{Number part-time employees.}#'   \item{\code{nmgrs}}{Number of managers/assistant managers.}#'   \item{\code{wage_st}}{Starting wage ($/hr).}#'   \item{\code{inctime}}{Months to usual first raise.}#'   \item{\code{firstinc}}{Usual amount of first raise (\$/hr).}#'   \item{\code{bonus}}{"Yes" if cash bounty for new workers.}#'   \item{\code{pctaff}}{\% of employees affected by new minimum.}#'   \item{\code{meals}}{Free/reduced priced code.}#'   \item{\code{open}}{Hour of opening.}#'   \item{\code{hrsopen}}{Number of hours open per day.}#'   \item{\code{psode}}{Price of medium soda,含税。‘\项目\代码价格小薯条价格,含税。’\项目\代码戊三主菜价格,including tax.}#'   \item{\code{nregs}}{Number of cash registers in store.}#'   \item{\code{nregs11}}{Number of registers open at 11:00 pm.}#'   \item{\code{type}}{Type of 2nd interview.}#'   \item{\code{status}}{Status of 2nd interview.}#'   \item{\code{date}}{Date of 2nd interview.}#'   \item{\code{nregs11}}{"Yes" if special program for new workers.‘@source\url http://davidcard.berkeley.edu/data_set.html“njmin”

我已经记录了数据,并使用roxygen2::royxgenise()。创建数据集的文档。

现在可以使用这些数据创建一些漂亮的绘图:

GGTRAP(NJmin)aes(wage_st))+geom_密度(aes(fill=state)alpha=0.3)+facet_wrap(vars(observation))+theme_blog()+theme(legend.title=element_blank(),plot.caption=element_text(colour=“white”))+labs(title=“快餐店起薪分配”,caption=“4月1日,1992,新泽西州的最低工资从4.25美元上升到5.05美元。资料来源:Card和Krueger(1994)“)
##警告:删除了41行包含非有限值(stat_density)。

在下一篇博文中,我将编写第一个函数来执行diff和diff,我们将
了解如何向用户提供它,记录并测试!

希望你喜欢!如果你觉得这篇博文有用,你可能想跟着
我在推特用于博客文章更新和
给我买杯浓缩咖啡orpaypal.me.

给我买杯浓缩咖啡 给我买杯浓缩咖啡

留下评论作者,请关注他们博客上的链接和评论: 计量经济学和自由软件.

188bet appR博客提供 每日电子邮件更新金宝搏网址 R新闻与 教程关于以下主题: 数据科学大数据, r作业,可视化(可视化) GGPROTT2箱形图地图动画)程序设计(程序) 演播室斯威夫特乳胶SQLEclipsegit哈多普刮网)统计 回归主成分分析时间序列交易还有更多…



如果你走这么远,为什么不 subscribe for updates 从站点?选择您的口味: 电子邮件推特1188bet app,or 脸谱网

注释已关闭。

搜索R-Blo188bet appggers

赞助商

千万不要错过更新!
订阅R-Bloggers188bet app接收
最新R帖子的电子邮件。
(You will not see this message again.)

单击此处关闭(此弹出窗口将不再出现)