【问题标题】:R: sum over different columns (difftime)R:对不同列求和(difftime)
【发布时间】:2021-02-12 10:29:35
【问题描述】:

我有一个包含多个 difftimes 的数据框(假数据):

library(tidyverse)
library(lubridate)

df <- data.frame(q1_begin = dmy_hms("12.02.2021 08:00:00"),
                 q1_end = dmy_hms("12.02.2021 09:00:00"),
                 
                 q2_begin = dmy_hms("12.02.2021 09:00:00"),
                 q2_end = dmy_hms("12.02.2021 09:01:00"),
                 
                 q3_begin = dmy_hms("12.02.2021 09:00:00"),
                 q3_end = dmy_hms("12.02.2021 09:00:10"))

df <- df %>% mutate(time1 = q1_end - q1_begin,
              time2 = q2_end - q2_begin,
              time3 = q3_end - q3_begin) 

现在我想逐行计算所有列的总和(= time1 + time2 + time3)。 但是如何在不手动输入变量名的情况下做到这一点呢?我试过了:

df %>% mutate(grandTime = sum(starts_with("time"))) # <- Doesn't work

【问题讨论】:

    标签: r dplyr tidyverse


    【解决方案1】:

    这是一种可能的解决方案:

    library(tidyverse)
    library(lubridate)
    
    df %>% mutate(total_time = Reduce(`+`, select(., starts_with('time'))))
    
    # ...    time1  time2   time3 total_time
    # ...    hours 1 mins 10 secs  3670 secs
    

    或者使用data.table:

    library(data.table)
    
    setDT(df)[, total_time := Reduce(`+`, .SD), .SDcols=patterns('time')]
    

    【讨论】:

    • 好一个。确实是reduce的好用法。赞成
    猜你喜欢
    • 2015-07-30
    • 1970-01-01
    • 1970-01-01
    • 2014-03-07
    • 1970-01-01
    • 2018-04-12
    • 2018-11-04
    • 1970-01-01
    • 2022-10-05
    相关资源
    最近更新 更多