seq.int(0, to0 - from, by) 中的错误:'by' 参数中的错误登录

Error in seq.int(0, to0 - from, by) : wrong sign in 'by' argument

我正在尝试创建一个带有日期序列的长 tibble 数据框。现在我尝试使用这个example。该示例有效,但当我尝试对自己的数据实施时无效。它给出一条错误消息:Error in seq.int(0, to0 - from, by) : wrong sign in 'by' argument。无法弄清楚为什么我的 tibble 上的代码会抛出错误...非常感谢大家的帮助。

这个例子有效:

library(tidyverse)

example <- structure(list(idnum = c(17L, 17L, 17L), start = structure(c(8401, 
8401, 8401), class = "Date"), end = structure(c(8765, 8765, 8765
), class = "Date")), class = "data.frame", .Names = c("idnum", 
"start", "end"), row.names = c(NA, -3L)) 

example %>%
  as.tibble() %>%
  nest(start, end) %>% view
  mutate(data = map(data, ~seq(unique(.x$start), unique(.x$end), 1))) %>%
  unnest(data)

这就是我要找的东西。

我数据上的代码给出错误信息。

df <- structure(list(nieuw = c("Nieuw", "Nieuw", "Nieuw"), jaar = c(NA, 
2013, 2014), aow_jaar = c("65", "65", "65"), aow_maanden = c(NA, 
"1", "2"), vanaf = structure(c(-8036, -8036, -7701), class = "Date"), 
    tot_en_met = structure(c(-8037, -7702, -7367), class = "Date")), class = c("tbl_df", 
"tbl", "data.frame"), row.names = c(NA, -3L))

df %>%
  nest(vanaf, tot_en_met) %>%
  mutate(data = map(data, ~seq(unique(.x$vanaf), unique(.x$tot_en_met), 1))) %>%
  unnest(data)

Error in seq.int(0, to0 - from, by) : wrong sign in 'by' argument

错误消息说它与 by = 参数有关,但我不明白为什么它不起作用...

这里的问题是其中一行(第一行)的结束日期早于开始日期。一个选项是检查 min/max 然后执行 seq

library(dplyr)
library(purrr)
df %>% 
   mutate(out = map2(vanaf, tot_en_met, 
          ~ seq(min(.x, .y), max(.x, .y), by = 1))) # %>%
   # unnest # if needed
# A tibble: 3 x 7
#  nieuw  jaar aow_jaar aow_maanden vanaf      tot_en_met out         
#  <chr> <dbl> <chr>    <chr>       <date>     <date>     <list>      
#1 Nieuw    NA 65       <NA>        1948-01-01 1947-12-31 <date [2]>  
#2 Nieuw  2013 65       1           1948-01-01 1948-11-30 <date [335]>
#3 Nieuw  2014 65       2           1948-12-01 1949-10-31 <date [335]>

此外,我们可以使用 pmin/pmax

以矢量化方式执行此操作,而不是在每一行中执行 min/max
df %>%
   mutate(out = map2(pmin(vanaf, tot_en_met), 
                     pmax(vanaf, tot_en_met), seq, by = 1))