我正试图根据公司最后一次账户活动的日期创建一列公司关闭日期,如果公司没有关闭(即,如果firms.df$Status != "Dead"
(,则插入"0"。这是代码:
## create column of company failure dates
firms.df <- within(firms.df, ifelse(firms.df$Status == "Dead",
FailDate <- ifelse(!is.na(AccountName), LastAction, FirstAction),
FailDate <- 0))
firms.df$FailDate <- as.Date(firms.df$FailDate, origin = "1970-01-01")
问题是,它当前为每个单元格返回一个"0"。如果我删除了检查company.df$Status=="Dead"的初始运算符,它将从LastAction和FirstAction返回适当的值(按预期(。
逻辑运算符查找firms.df$Status == "Dead"
是否有问题,但我搞不清楚。我也试过使用Status %in% c("Dead")
,但没有用。Status和AccountName都是字符,LastAction和FirstAction都是日期。
如果您能够计算出如何将FailDate格式化为Date而不在底部添加额外的行,则可获得额外积分。提前谢谢。
使用data.table
,更快、更清洁的解决方案:
# convert to data table
setDT(firms.df)
# subset by rows and apply the condition
firms.df[Status == 'Dead', FailDate := ifelse(!is.na(AccountName), LastAction, FirstAction)]
firms.df[Status != 'Dead', FailDate := 0]