В R как получить статистику по разнице во времени сеансов - PullRequest
1 голос
/ 28 февраля 2011

У меня есть данные, которые представляют различные сеансы пользователей. Это в формате как

User       StartTime        EndTime
user1      1291043867      1291044055
user2      1290970409      1290972041
user3      1291019561      1291019562
user2      1290897232      1290897244
user1      1291100532      1291100559
user3      1291142492      1291142496
user2      1291128374      1291128391
user2      1291032746      1291032748
...

Обратите внимание, что временные метки являются временами Unix.

Мне нужно получить сводную статистику, такую ​​как среднее значение, процентили по числу сеансов для каждого пользователя. Мне также нужно получить среднее время между каждым последующим сеансом для всех пользователей. Как мне сделать это в R.

Ответы [ 2 ]

2 голосов
/ 28 февраля 2011

С помощью ddply и summarise вы можете, вероятно, получить большинство вещей из plyr:

foo <- data.frame(
User = paste("user",c(1:3,1:3,1:3),sep=""), 
StartTime = as.numeric(Sys.time() + 1:9*10), 
EndTime = as.numeric(Sys.time() + 1:9*10 + 2))

library(plyr)

ddply(foo,"User",summarise,
Nvisits = length(StartTime),
AvgTimePerSes = mean(EndTime - StartTime),
AvgTimeBetweenSes = mean(StartTime[-1] - StartTime[-length(StartTime)])
)
  User Nvisits AvgTimePerSes AvgTimeBetweenSes
1 user1       3       2            30
2 user2       3       2            30
3 user3       3       2            30

Редактировать:

Используя фрейм данных из ответа Романа:

foo <- read.table(textConnection("User       StartTime        EndTime
user1      1291043867      1291044055
user2      1290970409      1290972041
user3      1291019561      1291019562
user2      1290897232      1290897244
user1      1291100532      1291100559
user3      1291142492      1291142496
user2      1291128374      1291128391
user2      1291032746      1291032748"), header = TRUE)


library(plyr)

ddply(foo,"User",summarise,
    Nvisits = length(StartTime),
    AvgTime = mean(EndTime - StartTime),
    AvgBetweenSes = mean(StartTime[-1] - StartTime[-length(StartTime)]) 
)
   User Nvisits AvgTime AvgBetweenSes
1 user1       2  107.50         56665
2 user2       4  415.75         20779
3 user3       2    2.50        122931
2 голосов
/ 28 февраля 2011

Это должно помочь вам частично начать.

sfac <- read.table(textConnection("User       StartTime        EndTime
user1      1291043867      1291044055
user2      1290970409      1290972041
user3      1291019561      1291019562
user2      1290897232      1290897244
user1      1291100532      1291100559
user3      1291142492      1291142496
user2      1291128374      1291128391
user2      1291032746      1291032748"), header = TRUE)

sfac$diff <- with(sfac, EndTime - StartTime) # add difference
sfac.split <- split(sfac, sfac$User)

#num of sessoins
lapply(sfac.split, nrow)

$user1
[1] 2

$user2
[1] 4

$user3
[1] 2

#mean
lapply(sfac.split, function(x) mean(x$diff))

$user1
[1] 107.5

$user2
[1] 415.75

$user3
[1] 2.5
...