【问题标题】:dplyr: max and min between a row and a specific valuedplyr:行和特定值之间的最大值和最小值
【发布时间】:2021-05-31 11:04:44
【问题描述】:

我正在尝试创建导致给定行和特定值之间的最大值的代码,但我不知道该怎么做。我在这里看到了一些建议,但它们仅适用于行的几个值

这是我预期结果的一个简单示例。我想要“开始”和 19:00:00 之间的最大值(我正在使用 hms)

Type | Start    | max_value_between
<chr>| <hms>    |   <hms>
 A   | 19:30:00 |  19:30:00
 B   | 18:45:00 |  19:00:00

提前致谢

【问题讨论】:

  • 如果你可以减去时间,我会寻找开始的最小值和最大值 - 19:00:00
  • 如果您创建一个小的可重现示例以及预期的输出,这将更容易提供帮助。阅读how to give a reproducible example。

标签: r dplyr lubridate


【解决方案1】:

你可以使用pmax:

mydata$max_value_between <- pmax(mydata$Start, '19:00:00')

【讨论】:

    【解决方案2】:

    我们也可以使用

    library(dplyr)
    my_data %>%
       rowwise %>%
       mutate(max_value_between = max(Start, "19:00:00")) %>%
       ungroup
    

    【讨论】:

      【解决方案3】:
      library(tidyverse)
      library(hms)
      
      data <- tribble(
        ~Type, ~Start, 
        "A", "19:30:00",
        "B", "18:45:00"
      ) %>% 
        mutate(Start = hms::as_hms(Start))
      
      data %>% 
        mutate(
          max_value = if_else(Start > as_hms("19:00:00"), Start, as_hms("19:00:00"))
        )
      
      
      # # A tibble: 2 x 3
      #   Type  Start  max_value
      #   <chr> <time> <time>   
      # 1 A     19:30  19:30    
      # 2 B     18:45  19:00 
      

      【讨论】:

      • 嗨 Zaw!很多。你能告诉我是否可以使用相同的假设从 DataTime 中以 POSICXct 格式提取日期,例如“2020-12-13 19:39:34”>> 结果:2020-12-13?
      • 您可以使用基本 R 函数 as.Date() 从 POSIXct 中提取日期。
      猜你喜欢
      • 1970-01-01
      • 2015-09-24
      • 2015-03-28
      • 2017-05-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多