我正在尝试根据其上次帐户活动的日期来创建一列公司关闭日期,如果该公司没有关闭(即,如果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”。如果删除用于检查firm.df $ Status ==“ Dead”的初始运算符,它将从LastAction和FirstAction返回适当的值(按预期方式)。
看起来似乎firms.df$Status == "Dead"
的逻辑运算符有问题,但是我无法弄清楚。我也尝试过使用Status %in% c("Dead")
,但无济于事。 Status和AccountName都是字符,LastAction和FirstAction都是日期。
如果您能确定如何将FailDate格式化为日期而底部没有多余的行,则表示奖励。提前致谢。
答案 0 :(得分:0)
使用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]