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

R 基于其他列中的值的条件计算,r,R,假设我有一个data.frame,我想创建一个名为duration的新列,它只针对status=Active的记录计算,使用2016-12-10作为今天的日期,这样duration=today-start\u date 这种条件计算的最佳方法是什么 status <- c("Active", "Inactive", "Active") date <- c("2016-10-25", "2015-05-11", "2015-3-18") start_date <-

假设我有一个
data.frame
,我想创建一个名为
duration
的新列,它只针对
status=Active
的记录计算,使用
2016-12-10
作为今天的日期,这样
duration=today-start\u 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)

status我们可以使用
data.table
。将“data.frame”转换为“data.table”(
setDT(df1)
),在“i”中创建逻辑索引,并将(
:=
)今天和开始日期之间的差异指定为“持续时间”列。这将是有效的,因为它分配到位

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]

i1我们可以使用
data.table
。将“data.frame”转换为“data.table”(
setDT(df1)
),在“i”中创建逻辑索引,并将(
:=
)今天和开始日期之间的差异指定为“持续时间”列。这将是有效的,因为它分配到位

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]

i1使用
dplyr
,您可以尝试:

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

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

使用
dplyr
,您可以尝试:

dft %>% 
  dplyr::mutate(duration = ifelse(status == "Active", (today - start_date), NA))
其中
dft
是初始数据帧