Я использую логистическую экспозицию для расчета успеха инкубации для птичьих гнезд. Мой набор данных довольно обширен, и у меня есть ~ 2000 гнезд, каждый с уникальным идентификатором («ClutchID»). Мне нужно рассчитать количество дней, в течение которых данное гнездо было выставлено («Экспозиция»), или, проще говоря, разница между . первый и последний день, когда я использовал следующий код:Вычислить разницу между датами по группам в R
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 вычисляет значение экспозиции для 1-го дня (который не делает. .. чувство)
Что мне действительно нужно, чтобы вычислить разницу между 1-й и последний день для данного сцепления я также посмотрел на следующее:
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, поэтому любая помощь будет принята с благодарностью.
Edit: Ниже приведен пример данных я использую
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"))
Добро пожаловать в переполнение стека! Можете ли вы включить данные, которые предоставят нам [воспроизводимый пример] (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example)? –
может быть «подытожить» (экспозиция = diff (диапазон (DateVisit))) '? –
что @BenBolker сказал, просто добавив, что его строка «summary» должна идти после вашей строки 'group_by'. И в зависимости от класса 'DateVisit' вы можете либо оставить свою первую строку' mutate', либо изменить строку 'summary', чтобы ссылаться на' Exposure' вместо 'DateVisit'. – rosscova