Функция R min и max не работает для дат - PullRequest
0 голосов
/ 13 ноября 2018

У меня есть фрейм данных, 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 голосов
/ 13 ноября 2018

Мы можем использовать pmin/pmax для получения минимума / максимума, когда один или оба входных аргумента являются вектором длины больше 1 (если оба имеют длину больше 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

Или применить 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.Согласно ?min

pmax * () и pmin * () принимают один или несколько векторов в качестве аргументов, возвращают их на общую длину и возвращают один вектор, дающий «параллельные» максимумы (или минимумы).) векторов аргументов.

...