比较字符串以根据逻辑运算符赋值
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]
我正在尝试根据他们最后一个帐户的日期创建一列公司关闭日期 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]