我应该如何处理 'from' must be of length 1 错误?
How should I deal with 'from' must be of length 1 error?
我试图计算特定日期之间的天数。
我有 2 列包含所有字符向量。
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)
具体日期为2015-04-11至2015-07-10。
所以我使用 seq() 制作了特定日期之间的所有日期。
sp.da1<-ymd("2015-04-11")
sp.da2<-ymd("2015-07-10")
inteval.da<-seq(sp.da1, sp.da2, by = 'day')
我想知道具体日期之间相隔多少天。
我尝试像上面那样使用 seq(start.date,end.date,by = 'day') ,但出现此错误:'from' must be of length 1
请帮帮我!!!
首先:为什么列 start.date 和 end.date 不是日期 class?如果您将这些列存储为日期,那么当您想要这样使用它们时就不必转换它们。在您的示例代码中,您将字符串传递给 seq()
函数,但效果不佳。
以下代码应该为您的数据框中的每一行提供一系列日期:
apply(date10, 1, function(x) seq(ymd(x['start.date']), ymd(x['end.date']), 'day'))
此代码的作用是将您的数据帧按行切分并一一考虑。这意味着您每次都将一个开始日期和一个结束日期传递给 seq
函数,而不是一整列。那就是导致你出错的原因。
如果你想知道中间的天数,我建议这个解决方案:
date10$diff <- ymd(date10$end.date) - ymd(date10$start.date)
这将创建 'difftime' class 的列。您可以通过添加 as.integer()
:
将其转换为简单整数
date10$diff <- as.integer(ymd(date10$end.date) - ymd(date10$start.date))
您问的是给定时间间隔在主要时间间隔内有多少天。
让我们首先设置三个不同的时间间隔。然后我们编写一个函数来检查每一天 x
是在主间隔内还是外。如果我们总结主要间隔内的天数,我们就会有您要搜索的内容:
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_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
我试图计算特定日期之间的天数。 我有 2 列包含所有字符向量。
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)
具体日期为2015-04-11至2015-07-10。
所以我使用 seq() 制作了特定日期之间的所有日期。
sp.da1<-ymd("2015-04-11")
sp.da2<-ymd("2015-07-10")
inteval.da<-seq(sp.da1, sp.da2, by = 'day')
我想知道具体日期之间相隔多少天。
我尝试像上面那样使用 seq(start.date,end.date,by = 'day') ,但出现此错误:'from' must be of length 1
请帮帮我!!!
首先:为什么列 start.date 和 end.date 不是日期 class?如果您将这些列存储为日期,那么当您想要这样使用它们时就不必转换它们。在您的示例代码中,您将字符串传递给 seq()
函数,但效果不佳。
以下代码应该为您的数据框中的每一行提供一系列日期:
apply(date10, 1, function(x) seq(ymd(x['start.date']), ymd(x['end.date']), 'day'))
此代码的作用是将您的数据帧按行切分并一一考虑。这意味着您每次都将一个开始日期和一个结束日期传递给 seq
函数,而不是一整列。那就是导致你出错的原因。
如果你想知道中间的天数,我建议这个解决方案:
date10$diff <- ymd(date10$end.date) - ymd(date10$start.date)
这将创建 'difftime' class 的列。您可以通过添加 as.integer()
:
date10$diff <- as.integer(ymd(date10$end.date) - ymd(date10$start.date))
您问的是给定时间间隔在主要时间间隔内有多少天。
让我们首先设置三个不同的时间间隔。然后我们编写一个函数来检查每一天 x
是在主间隔内还是外。如果我们总结主要间隔内的天数,我们就会有您要搜索的内容:
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_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