比较字符串以基于逻辑运算符分配值

时间:2018-07-25 13:48:51

标签: r date compare operators character

我正在尝试根据其上次帐户活动的日期来创建一列公司关闭日期,如果该公司没有关闭(即,如果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格式化为日期而底部没有多余的行,则表示奖励。提前致谢。

1 个答案:

答案 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]