比较字符串以根据逻辑运算符赋值

Comparing strings to assign values based on a logical operator

我正在尝试根据他们最后一个帐户的日期创建一列公司关闭日期 activity,如果公司没有关闭(即,如果 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")

问题是它目前 returns 每个单元格都有一个“0”。如果我删除检查是否 firms.df$Status == "Dead" 的初始运算符,它 returns 来自 LastAction 和 FirstAction 的适当值(如预期的那样)。

看是否firms.df$Status == "Dead"的逻辑运算符有问题,但我想不通。我也尝试过使用 Status %in% c("Dead"),但无济于事。 Status 和 AccountName 都是字符,LastAction 和 FirstAction 都是日期。

如果您能弄清楚如何将 FailDate 格式化为日期而底部没有额外的行,则可加分。提前致谢。

使用 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]