Подсчет наблюдений в диапазоне дат R
Вероятно, это действительно простое решение. У меня есть два набора данных. Один - это вектор временных меток твитов POSIXct, а второй - вектор временных меток POSIXct ADL HEAT Map.
Я хочу создать функцию, которая позволяет мне брать даты из вектора твитов и для каждого из них подсчитывать количество временных меток в векторе ADL HEAT Map, которые попадают в указанный диапазон из твита.
Моя цель - создать такую функцию, чтобы я мог вставить вектор твитов, вектор ADL, количество дней из вектора твитов, чтобы начать подсчет, и количество дней из вектора твитов, чтобы прекратить подсчет, и вернуть вектор of считает ту же длину, что и данные твитов.
Я уже пробовал решение здесь, и оно не сработало: подсчитать количество появлений в диапазоне дат в R
Вот пример того, что я пытаюсь сделать. Вот уменьшенная версия наборов данных, которые я использую:
tweets <- c("2016-12-12 14:34:00 GMT", "2016-12-5 17:20:06 GMT")
ADLData <- c("2016-12-11 16:30:00 GMT", "2016-12-7 18:00:00 GMT", "2016-12-2 09:10:00 GMT")
Я хочу создать функцию, назовем ее, countingfunction
которая позволяет мне вводить первый набор данных, второй и вызывать количество дней, чтобы оглянуться назад. В этом примере я выбрал 7 дней:
countingfunction(tweets, ADLData, 7)
В идеале это должно было бы вернуть вектор длины tweets
или, в данном случае, 2 со счетчиками для каждого из того, сколько событий ADLData
произошло в течение последних 7 дней с даты в tweets
. В этом случае c(2,1)
.
Ответы
Итак, если я правильно вас понял, у вас есть такие данные:
tweets <- c(as.POSIXct("2020-08-16", tz = ""), as.POSIXct("2020-08-15", tz = ""), as.POSIXct("2020-08-14", tz = ""), as.POSIXct("2020-08-13", tz = ""))
ADL <- c(as.POSIXct("2020-08-15", tz = ""), as.POSIXct("2020-08-14", tz = ""))
И вы хотите сказать, находится ли твит в диапазоне дат ADL или нет. Этого можно добиться, выполнив следующие действия:
ifelse(tweets %in% ADL, print("its in"), print("its not"))
Вы можете легко назначить это другому вектору, который затем укажет, включен он или нет.
Вы можете писать countingfunction
с помощью outer
и вычислять разницу во времени между каждым значением двух векторов, используя difftime
.
countingfunction <- function(x1, x2, n) {
mat <- outer(x1, x2, difftime, units = 'days')
rowSums(mat > 0 & mat <= n)
}
Предполагая, что у вас есть такие векторы класса POSIXct
:
tweets <- as.POSIXct(c("2016-12-12 14:34:00", "2016-12-5 17:20:06"), tz = 'GMT')
ADLData <- as.POSIXct(c("2016-12-11 16:30:00","2016-12-7 18:00:00",
"2016-12-2 09:10:00"), tz = 'GMT')
n <- 7
Вы можете передать их как:
countingfunction(tweets, ADLData, n)
#[1] 2 1