У меня есть data.frame
, содержащий информацию из журнала сайта. Среди других столбцов data.frame
содержит идентификатор файла cookie, временную метку и URL-адрес. Теперь я хочу вычислить время, затрачиваемое на каждую страницу, при условии, что страница просматривается до тех пор, пока другая страница не будет загружена одним и тем же идентификатором файла cookie. Поэтому data.frame
заказана печенья ID и метку времени с помощью:Вычисление разницы между записью и следующей записью в упорядоченном кадре данных
data = data[with(data, order(cookie_id, timestamp)), ]
Вот как рассчитать время, проведенное на каждой странице с помощью for
цикла:
data$calc_time_spent = NA
for (i in 1:(nrow(data)-1)) {
if (!is.na(data$cookie_id[i]) & !is.na(data$cookie_id[i+1]) & data$cookie_id[i] == data$cookie_id[i+1]) {
data$calc_time_spent[i] = data$timestamp[i+1]-data$timestamp[i]
}
}
К сожалению, это очень медленно, поэтому мне нужно более сложное решение, возможно, используя функцию apply?
-
Вот несколько примеров данных:
cookie_id = c("5", "5", "8", "8", "8")
timestamp = as.POSIXlt(c("2005-4-19 7:01:33", "2005-4-19 7:01:35", "2005-4-19 7:01:10", "2005-4-19 7:01:23", "2005-4-19 7:01:27"))
data = data.frame(timestamp, cookie_id)
которые выглядят следующим образом:
timestamp cookie_id
1 2005-04-19 07:01:33 5
2 2005-04-19 07:01:35 5
3 2005-04-19 07:01:10 8
4 2005-04-19 07:01:23 8
5 2005-04-19 07:01:27 8
После операции данные должны иметь третий столбец:
timestamp cookie_id calc_time_spent
1 2005-04-19 07:01:33 5 2
2 2005-04-19 07:01:35 5 NA
3 2005-04-19 07:01:10 8 13
4 2005-04-19 07:01:23 8 4
5 2005-04-19 07:01:27 8 NA
Что-то вроде 'ave (данные $ timestamp, data $ cookie_id, FUN = diff)'? Укажите [воспроизводимый пример] (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example). – sgibb
Теперь я представил воспроизводимый пример. – elgehelge