【问题标题】:R min and max function does not work for datesR min 和 max 函数不适用于日期
【发布时间】:2019-04-15 16:35:41
【问题描述】:

我有一个带有日期变量的数据框 df。

   locationID organe    
    <int>    <date>    
      1    1940-04-01
      2    1938-07-01
      3    1938-07-01
      4    1938-07-01

我想将日期与固定时间点进行比较,例如“1938-12-1”,以找到最早的日期。我使用了 min 函数但失败了。

df %>% mutate(earliest=min(organe,as.Date("1938-12-1")))


locationID organe     earliest  
<int>      <date>     <date>    
1       1940-04-01 1937-09-01
2       1938-07-01 1937-09-01
3       1938-07-01 1937-09-01
4       1938-07-01 1937-09-01

我不知道为什么 min 函数在这里不起作用,虽然它适用于以下情况

min(as.Date("1938-07-01"),as.Date("1938-12-1"))
[1] "1938-07-01"

有人可以帮忙吗?

【问题讨论】:

    标签: r date min


    【解决方案1】:

    当一个或两个输入参数是长度大于 1 的向量时,我们可以使用pmin/pmax 来获取最小值/最大值(如果两者的长度都大于 1,则假定长度相同)

    df %>% 
      mutate(earliest=pmin(organe,as.Date("1938-12-1")))
    # A tibble: 4 x 3
    #  locationID organe     earliest  
    #      <int> <date>     <date>    
    #1          1 1940-04-01 1938-12-01
    #2          2 1938-07-01 1938-07-01
    #3          3 1938-07-01 1938-07-01
    #4          4 1938-07-01 1938-07-01
    

    或者在rowwise之后申请min

    df %>% 
       rowwise %>% 
       mutate(earliest=min(organe, as.Date("1938-12-1")))
    

    请注意,min 返回单个值作为输出,即

    min(5:1, 3)
    #[1] 1
    
    min(5:3, 1)
    #[1] 1
    

    对于矢量化最小值,请使用pmin。根据?min

    pmax*() 和 pmin*() 将一个或多个向量作为参数,将它们回收到公共长度并返回一个向量,给出参数向量的“平行”最大值(或最小值)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-09-28
      • 2017-02-08
      • 2016-10-26
      • 1970-01-01
      • 2017-08-06
      • 2021-01-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多