【问题标题】:Conditional calculation based on values in other column基于其他列中的值的条件计算
【发布时间】:2017-01-02 16:48:46
【问题描述】:

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

【问题讨论】:

    标签: r


    【解决方案1】:

    我们可以使用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]
    

    在哪里

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

    【讨论】:

      【解决方案2】:

      使用dplyr,你可以试试:

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

      dft 是您的初始数据框。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-10-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-08-20
        • 2015-06-02
        相关资源
        最近更新 更多