我有以下问题。我有两个带有字符(c.vec)的向量,一个带有日期(d.vec)。如果 char 向量具有某个属性,我想计算某个时间间隔。由于 if 语句应该检查每一行,我读到我需要使用嵌套的 ifelse 语句(对于日期向量中的某些月份,应使用特定日期来计算时间间隔)。我的 ifelse 语句计算如下:
1) 如果 c.vec == 'Tree' 并且 d.vec 的月份在 10 月之后 – 然后计算 15.07.YearAfterd.vec - d.vec 的日期并覆盖另一个名为 d.diff 的向量(这个向量已经有数字存储在其中的值)与结果
2) 如果 c.vec == 'Tree' 并且 d.vec 的月份在五月之后——那么计算 15.02.YearAfterd.vec - d.vec 的日期并用结果覆盖 d.diff
3) 如果 c.vec == 'Tree' 并且 d.vec 的月份在 5 月之前 – 然后计算 15.07.YearOfd.vec- d.vec 的日期并用结果覆盖 d.diff
4) 如果 c.vec =! 'Tree' 然后只使用已经存储在 d.diff 中的值,不要覆盖任何东西
这是我尝试过的(但是,它只返回 NA) - 举个例子:
c.vec <- c('tree','tree','tree','flower','flower')
d.diff <- c(150,80,97,52,74)
d.vec <- as.Date(c('2016-11-24','2017-06-14','2016-02-21','2017-05-07','2016-04-18'))
d.diff <- ifelse(c.vec=='tree',
# Check if date is after October. The as.Date() part should return 15.07. of the year after d.vec
ifelse(month(d.vec)>10,d.diff <- as.numeric(as.Date(
capture.output(cat(year(d.vec)+1,'-07-15')),'%Y -%m-%d')-d.vec),
# Check if date is after May
ifelse(month(d.vec)>5,d.diff <- as.numeric(as.Date(
capture.output(cat(year(d.vec)+1,'-02-15')),'%Y -%m-%d')-d.vec),
# Else, use 15.07. of the year of d.vec to calculate the time difference
d.diff <- as.Date(capture.output(cat(year(d.vec),'-07-15')),'%Y -%m-%d')-d.vec)),
# if c.vec =! tree just use the existing values in d.diff
d.diff <- d.diff)
我需要如何调整它才能获得 d.diff 向量中的特定时间差?我还尝试使用将向量存储在数据框中,然后使用 df.name$... 来使用向量的条目,但它也只返回 NA。谢谢您的帮助!
我们可以通过一个for
仅使用基数 R的简单循环来做到这一点
for (i in seq_along(d.vec)) {
if (c.vec[i] == "tree") {
current_date <- d.vec[i]
current_month <- as.integer(format(current_date, "%m"))
current_year <- as.integer(format(current_date, "%Y"))
if (current_month > 10)
d.diff[i] <- as.numeric(as.Date(paste0(current_year + 1, "-07-15")) - current_date)
else if (current_month > 5)
d.diff[i] <- as.numeric(as.Date(paste0(current_year + 1, "-02-15")) - current_date)
else
d.diff[i] <- as.numeric(as.Date(paste0(current_year, "-07-15")) - current_date)
}
}
d.diff
#[1] 233 246 145 52 74
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句