How should I deal with 'from' must be of length 1 error?

14,464

You are asking how many days of a given time interval is inside a main time interval.

Let's first set up the three varying time intervals. Then we write a function that checks for every day x whether it is inside or outside the main interval. If we sum up the number of days inside the main interval, we'll have what you're searching for:

date10$start.date <- as.Date.character(date10$start.date, format="%Y-%m-%d")
date10$end.date   <- as.Date.character(date10$end.date,   format="%Y-%m-%d")

your_intervals <- Map(seq, from = date10[, 1], to = date10[, 2], by = "days")

your_intervals is a list with three data frames, each containing every day in the interval.

is_in_interval <- function(x, l_bound = sp.da1, u_bound = sp.da2){
  return (x > l_bound) & (x < u_bound)
}

sapply(your_intervals, function(x) sum(is_in_interval(x)))
# [1] 0 0 63
Share:
14,464
Dougie Hwang
Author by

Dougie Hwang

Updated on August 22, 2022

Comments

  • Dougie Hwang
    Dougie Hwang over 1 year

    I tried to count days between specific dates. I have 2 columns with all character vectors.

    start.date <- c("2015-01-10","2015-01-11","2015-02-24")
    end.date <- c("2015-03-10","2015-04-01","2015-06-13")
    date10 <- data.frame(cbind(start.date,end.date))
    date10$start.date <- as.character(date10$start.date)
    date10$end.date <- as.character(date10$end.date)
    str(date10)
    

    and the specific dates are from 2015-04-11 to 2015-07-10. so I made all date which is between the specific dates by using seq(). sp.da1<-ymd("2015-04-11") sp.da2<-ymd("2015-07-10") inteval.da<-seq(sp.da1, sp.da2, by = 'day') I wanted to know how many days are between the specific dates. I tried to use seq(start.date,end.date,by = 'day') like above, but I get this error: 'from' must be of length 1

    Please Help me!!!

    • A. Stam
      A. Stam over 6 years
      Is your goal to create a sequence of dates for each row in the dataframe? Or do you just want to know the number of days in between the two dates?
    • Dougie Hwang
      Dougie Hwang over 6 years
      If I know how to create a sequence of dates for each row in the dataframe, then I can find the number of days. Can I know both of them?? :)
    • A. Stam
      A. Stam over 6 years
      Of course, but if you just want to know the number of days in between, there are easier solutions.
    • Dougie Hwang
      Dougie Hwang over 6 years
      Ok, then Could I know the easier way??
    • clancy
      clancy over 5 years
  • Dougie Hwang
    Dougie Hwang over 6 years
    Error in seq.int(0, to0 - from, by) : wrong sign in 'by' argument I got this error. :( what is the problem??
  • A. Stam
    A. Stam over 6 years
    That code isn't similar to the answer I posted - for example, why are you using seq.int? I cannot answer this question unless you provide more information.
  • Dougie Hwang
    Dougie Hwang over 6 years
    This code is just sample of my data. Actually I have 20 variables and over 3000 rows. they are in shape of data.frame. Like the code two of them are about date. so I tried to adapt your code to my situation. I can't write my all data in here. :(
  • Dougie Hwang
    Dougie Hwang over 6 years
    Error in seq.int(0, to0 - from, by) : wrong sign in 'by' argument I got this error.... Can you give me any clue??
  • KenHBS
    KenHBS over 6 years
    Could it be that date[, 2] is smaller than date[, 1] in some of your cases? In the data you posted, it all works..