基于其他列中的值的条件计算

时间:2017-01-02 06:26:47

标签: r

假设我有data.frame,我希望创建一个名为duration的新列,它仅针对status = Active的记录进行计算,使用2016-12-10作为今天的日期,所以duration = today - start_date

这种条件计算的最佳方法是什么?

status <- c("Active", "Inactive", "Active")    
date <- c("2016-10-25", "2015-05-11", "2015-3-18")    
start_date <- as.Date(date, format = "%Y-%m-%d")    
data.frame(status, start_date)

2 个答案:

答案 0 :(得分:2)

我们可以使用data.table。转换&#39; data.frame&#39;到&#39; data.table&#39; (setDT(df1)),在&#39; i&#39;中创建逻辑索引。并指定(:=)今天&#39;之间的差异。和&#39; start_date&#39;作为&#39;持续时间&#39;柱。这将是有效的,因为它分配到位

library(data.table)
setDT(df1)[status == "Active", duration := today - start_date]
df1
#     status start_date duration
#1:   Active 2016-10-25  46 days
#2: Inactive 2015-05-11  NA days
#3:   Active 2015-03-18 633 days

base R选项

i1 <- df1$status == "Active"
df1[i1, "duration"] <- today - df1$start_date[i1]

,其中

today <- as.Date("2016-12-10")

答案 1 :(得分:0)

使用dplyr,您可以尝试:

dft %>% 
  dplyr::mutate(duration = ifelse(status == "Active", (today - start_date), NA))

其中dft是您的初始数据框。