【发布时间】:2021-06-13 21:26:23
【问题描述】:
我有 2 个数据集,每个数据集有 2 列。在这两个集合中,列是日期和值。数据集 1 是最后一个日期为 06-10 的实际记录值。数据集 2 是数据集 1 中所有日期的预测值,以及未来日期(6-11、6-12、6-13 等)的附加行。
例如,
d1_date <- c('2021-06-08', '2021-06-09', '2021-06-10')
d1_value <- c(1, 2, 3)
d1 <- data.frame(d1_date, d1_value)
d2_date <- c('2021-06-08', '2021-06-09', '2021-06-10', '2021-06-11', '2021-06-12', '2021-06-13')
d2_value <- c(3, 2, 5, 4, 5, 6)
d2 <- data.frame(d2_date, d2_value)
现在我有一个从 '2021-06-08' 到 '2021-06-13' 的日期列表,我想将 d1 值放入日期 06-08 到 06-10 以及 d2 中的值到 06-11 到 06-13,这样新数据帧对应的值为 1, 2, 3, 4, 5, 6。
我在下面有一个函数:
fb_fb3 <- function(date) {
date <- as.Date(date)
ifelse(date <= max(d1$d1_date), return(d1$d1_value[d1$d1_date %in% date]), return(d2$d2_value[d2$d2_date %in% date]))
}
这有点工作,因为当我在函数中输入从 06-08 到 06-13 的日期列表时,它会给出我在 ifelse 中首先提到的任何数据帧的所有值。
当我先放入d1时,我无法绑定它,因为它只返回3个值,而不是6。当我放入d2时,我可以绑定它,但值将是3,2,5,4,5 ,6.
我无法将 d1 和 d2 的值组合起来得到 1、2、3、4、5、6。有人可以给一些建议吗?谢谢!
【问题讨论】:
-
ifelse要求所有参数的长度相同。此外,return应该在ifelse之外。可能你需要if/else而不是ifelse -
if/else 是指 if(.){.} else{.} 吗?这给出了与我第一次尝试相同的问题,并且在另一个论坛上我看到了使用 ifelse 的建议。你能详细说明一下吗?我现在可以使用一个函数,通过使用一个连接然后用特定的日期字符串替换 NAs。但绝对不是最优的,因为数据每周都会刷新,我必须用更多的数据集重复这个函数。
-
试试我发布的解决方案。