R最小值和最大值函数不适用于日期

时间:2018-11-12 22:20:37

标签: r date min

我有一个带有日期变量的数据框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"

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:2)

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

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

或在min之后应用rowwise

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。根据{{​​1}}

  

pmax *()和pmin *()将一个或多个向量作为参数,将它们循环使用相同的长度,并返回一个向量,以给出参数向量的“平行”最大值(或最小值)。