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))
我正在尝试创建一个带有日期序列的长 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))