2017-01-02 58 views
-1

假设我有一个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

我们可以使用data.table。将'data.frame'转换为'data.table'(setDT(df1)),在'i'中创建逻辑索引并将'today'和'start_date'之间的区别赋值为(:=)作为'duration'列。这将是有效的,因为它分配到位

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

其中

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

,你可以尝试:

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

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