【发布时间】:2017-03-26 23:55:35
【问题描述】:
我正在使用逻辑曝光来计算鸟巢的孵化成功率。我的数据集相当广泛,我有大约 2,000 个巢穴,每个巢穴都有一个唯一 ID(“ClutchID”)。我需要计算给定巢穴暴露的天数(“Exposure”),或者更简单地说,计算第一天也是最后一天。我使用了以下代码:
HS_Hatch$Exposure=NA
for(i in 2:nrow(HS_Hatch)){HS_Hatch$Exposure[i]=HS_Hatch$DateVisit[i]- HS_Hatch$DateVisit[i-1]}
其中 HS_Hatch 是我的数据集,而 DateVisit 是实际日期。唯一的问题是 R 正在计算第一个日期的曝光值(这没有意义)。
我真正需要的是计算给定离合器的第一个日期和最后一个日期之间的差异。我还研究了以下内容:
Exposure=ddply(HS_Hatch, "ClutchID", summarize,
orderfrequency = as.numeric(diff.Date(DateVisit)))
df %>%
mutate(Exposure = as.Date(HS_Hatch$DateVisit, "%Y-%m-%d")) %>%
group_by(ClutchID) %>%
arrange(Exposure) %>%
mutate(lag=lag(DateVisit), difference=DateVisit-lag)
我仍在学习 R,因此我们将不胜感激。
编辑: 以下是我正在使用的数据示例
HS_Hatch <- structure(list(ClutchID = c(1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L,
2L, 3L, 3L, 3L, 4L, 4L, 4L, 4L, 4L, 4L, 5L, 5L, 5L, 5L, 5L, 5L
), DateVisit = c("3/15/2012", "3/18/2012", "3/20/2012", "4/1/2012",
"4/3/2012", "3/18/2012", "3/20/2012", "3/22/2012", "4/3/2012",
"4/4/2012", "3/22/2012", "4/3/2012", "4/4/2012", "3/18/2012",
"3/20/2012", "3/22/2012", "4/2/2012", "4/3/2012", "4/4/2012",
"3/20/2012", "3/22/2012", "3/25/2012", "3/27/2012", "4/4/2012",
"4/5/2012"), Year = c(2012L, 2012L, 2012L, 2012L, 2012L, 2012L,
2012L, 2012L, 2012L, 2012L, 2012L, 2012L, 2012L, 2012L, 2012L,
2012L, 2012L, 2012L, 2012L, 2012L, 2012L, 2012L, 2012L, 2012L,
2012L), Survive = c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L)), class = c("tbl_df",
"tbl", "data.frame"), row.names = c(NA, -25L), .Names = c("ClutchID",
"DateVisit", "Year", "Survive"), spec = structure(list(cols = structure(list(
ClutchID = structure(list(), class = c("collector_integer",
"collector")), DateVisit = structure(list(), class = c("collector_character",
"collector")), Year = structure(list(), class = c("collector_integer",
"collector")), Survive = structure(list(), class = c("collector_integer",
"collector"))), .Names = c("ClutchID", "DateVisit", "Year",
"Survive")), default = structure(list(), class = c("collector_guess",
"collector"))), .Names = c("cols", "default"), class = "col_spec"))
【问题讨论】:
-
欢迎来到 Stack Overflow!能否请您提供可以为我们提供reproducible example 的数据?
-
也许
summarise(exposure=diff(range(DateVisit)))? -
@BenBolker 所说的,只是补充一点,他的
summarise行应该在您的group_by行之后。根据DateVisit的类别,您可以省略第一行mutate,或将summarise行更改为引用Exposure而不是DateVisit。 -
请edit 您的问题并在此处添加格式正确的数据,而不是在评论中,而不是作为链接。首选使用
dput。谢谢。 -
@rosscova 我根据您的 Ben Boke 建议修改了代码,但我收到以下错误消息:“UseMethod("mutate") 中的错误:没有适用于 'mutate' 的方法应用于类“函数”的对象我尝试删除第一个 mutate 函数,但随后我收到以下消息:“没有适用于“日期”类对象的“重组”方法就像我提到的那样,我对 R 和编码不是很熟悉所以我不明白这些错误信息
标签: r date-arithmetic