我正在尝试创建一个带有日期序列的长标题数据框。现在,我尝试使用此example。该示例有效,但是当我尝试实现自己的数据时无效。它给出错误消息:Error in seq.int(0, to0 - from, by) : wrong sign in 'by' argument
。 At无法弄清楚我的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 =
参数有关,但是我不明白为什么它不起作用...
答案 0 :(得分:1)
在这里,问题在于行(第一行)的结束日期之一低于开始日期。一种选择是检查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]>
此外,我们可以使用min/max
以向量化的方式来完成此操作,而不是在每一行中都使用pmin/pmax
df %>%
mutate(out = map2(pmin(vanaf, tot_en_met),
pmax(vanaf, tot_en_met), seq, by = 1))