如何计算子集的时间间隔?
How to calculate time interval for a subset?
我想计算数据帧子集的时间间隔。下面是一些示例数据:
dates
Model start test1 test2
1 2010-09-01 2014-09-09 2019-09-09
2 2010-06-01 2014-06-06 2019-06-06
又名
dates <- structure(list(Model = 1:2, start = c("2010-09-01", "2010-06-01"), test1 = c("2014-09-09", "2014-06-06"), test2 = c("2019-09-09",
"2019-06-06")), row.names = c(NA, -2L), class = "data.frame")
假设我想将模型 1 的间隔计算为从 start
到 test1
的时间。我将新变量命名为 elapsed
。我试过了:
library(lubridate)
dates$start <- as_date(dates$start)
dates$test1 <- as_date(dates$test1)
dates$elapsed[dates$Model==1] <- dates$start %--% dates$test1
我收到此警告消息:
In dates$elapsed[dates$Model == 1] <- dates$start %--% dates$test1 : number of items to replace is not a multiple of replacement length
结果看起来还不错。
dates$elapsed <- round(as.duration(dates$elapsed) / dyears(1),digits=2)
dates$elapsed
[1] 4.02 NA
我在这里找到了一些解释 Getting an error "number of items to replace is not a multiple of replacement length" 但我仍然不确定如何避免警告。谢谢。
警告完全有意义,因为要替换的项目数 (dates$elapsed[dates$Model==1]
) 的长度为 1,而替换长度 (dates$start %--% dates$test1
) 的长度为 2。
length(dates$elapsed[dates$Model==1])
#[1] 1
length(dates$start %--% dates$test1)
#[1] 2
您需要从两边进行子集化 (dates$Model==1
)
library(lubridate)
dates$elapsed[dates$Model==1] <- dates$start[dates$Model==1] %--% dates$test1[dates$Model==1]
#dates
# Model start test1 test2 elapsed
#1 1 2010-09-01 2014-09-09 2019-09-09 126921600
#2 2 2010-06-01 2014-06-06 2019-06-06 NA
将你的最后一行替换为:
library(tidyverse)
dates %>% mutate(elapsed = ifelse(Model==1, start %--% test1, NA))
将避免警告,并得到相同的结果。
我想计算数据帧子集的时间间隔。下面是一些示例数据:
dates
Model start test1 test2
1 2010-09-01 2014-09-09 2019-09-09
2 2010-06-01 2014-06-06 2019-06-06
又名
dates <- structure(list(Model = 1:2, start = c("2010-09-01", "2010-06-01"), test1 = c("2014-09-09", "2014-06-06"), test2 = c("2019-09-09",
"2019-06-06")), row.names = c(NA, -2L), class = "data.frame")
假设我想将模型 1 的间隔计算为从 start
到 test1
的时间。我将新变量命名为 elapsed
。我试过了:
library(lubridate)
dates$start <- as_date(dates$start)
dates$test1 <- as_date(dates$test1)
dates$elapsed[dates$Model==1] <- dates$start %--% dates$test1
我收到此警告消息:
In dates$elapsed[dates$Model == 1] <- dates$start %--% dates$test1 : number of items to replace is not a multiple of replacement length
结果看起来还不错。
dates$elapsed <- round(as.duration(dates$elapsed) / dyears(1),digits=2)
dates$elapsed
[1] 4.02 NA
我在这里找到了一些解释 Getting an error "number of items to replace is not a multiple of replacement length" 但我仍然不确定如何避免警告。谢谢。
警告完全有意义,因为要替换的项目数 (dates$elapsed[dates$Model==1]
) 的长度为 1,而替换长度 (dates$start %--% dates$test1
) 的长度为 2。
length(dates$elapsed[dates$Model==1])
#[1] 1
length(dates$start %--% dates$test1)
#[1] 2
您需要从两边进行子集化 (dates$Model==1
)
library(lubridate)
dates$elapsed[dates$Model==1] <- dates$start[dates$Model==1] %--% dates$test1[dates$Model==1]
#dates
# Model start test1 test2 elapsed
#1 1 2010-09-01 2014-09-09 2019-09-09 126921600
#2 2 2010-06-01 2014-06-06 2019-06-06 NA
将你的最后一行替换为:
library(tidyverse)
dates %>% mutate(elapsed = ifelse(Model==1, start %--% test1, NA))
将避免警告,并得到相同的结果。