我想创建一个新的虚拟变量,如果我的观察值在某个日期范围内,则打印1,如果不是,则打印0。我的数据集是10年范围内的政治捐款清单,我想制作一个虚拟变量来标记捐赠是否在某一特定日期范围内发生。我有10个日期范围。
有谁知道这样做的正确方法是创建循环吗?我一直在看这个看似相似的问题,但我认为我的问题会更复杂:Creating a weekend dummy variable
举个例子,我有一个变量列表记录了贡献被记录的日期,我想创建一个虚拟来显示这个贡献是否来自预算危机。因此,如果从2010年2月1日到2010年3月25日之间出现预算危机,从2009-06-05到2009年7月30日出现另一个预算危机,那么该变量理想情况如下:
贡献日期.......预算危机
2009-06-01 ........................... 0
2009-06-06 ........................... 1
2009-07-30 ........................... 1
2009-07-31 ........................... 0
2010-01-31 ........................... 0
2010-03-05 ........................... 1
2010-03-26 ........................... 0
再次感谢您的帮助!
答案 0 :(得分:1)
这似乎是使用%in%
函数的match(...)
语法的好机会。
dat <- data.frame(ContributionDate = as.Date(c("2009-06-01", "2009-06-06", "2009-07-30", "2009-07-31", "2010-01-31", "2010-03-05", "2010-03-26")), CrisisYes = NA)
crisisDates <- c(seq(as.Date("2010-02-01"), as.Date("2010-03-25"), by = "1 day"),
seq(as.Date("2009-06-05"), as.Date("2009-07-30"), by = "1 day")
)
dat$CrisisYes <- as.numeric(dat$ContributionDate %in% crisisDates)
dat
ContributionDate CrisisYes
1 2009-06-01 0
2 2009-06-06 1
3 2009-07-30 1
4 2009-07-31 0
5 2010-01-31 0
6 2010-03-05 1
7 2010-03-26 0