在R中给出多个时间值的最频繁时间

问题描述:

我想要给出不同用户的歌曲播放次数列表,让每个用户播放歌曲的平均时间。在R中给出多个时间值的最频繁时间

user time     action 
A  2013-03-25T14:12:24Z PLAY 
B  2013-03-28T14:54:30Z LIKE 
C  2013-04-18T18:51:10Z LIKE 
D  2013-05-07T18:06:24Z PLAY 
B  2013-04-23T12:18:41Z PLAY 
D  2013-04-29T12:00:16Z PLAY 
A  2013-03-27T12:09:37Z PLAY 
A  2013-04-16T18:31:44Z PLAY 

我只想包括动作等于PLAY的时间。

在此先感谢

+3

你有问题吗? –

+0

是的我想让每个用户平均时间播放一首歌曲?不知道平均水平是否是最好的方式! – Cormac

+0

如果您发布了一个可重现的示例,您将会得到许多人更加热心的帮助。您的评论与您的​​问题中的文字不符。 “最常见的时间”听起来像某种制表,这与我在阅读“平均播放歌曲的时间”时所想到的不同。此外,而不是在评论中澄清,你应该编辑你的问题,使其更加精确。 – A5C1D2H2I1M1N2O1R2T1

下面的代码返回的平均小时(一天),其中每个用户播放歌曲:

DF <- 
read.csv(text= 
"user,time,action 
A,2013-03-25T14:12:24Z,PLAY 
B,2013-03-28T14:54:30Z,LIKE 
C,2013-04-18T18:51:10Z,LIKE 
D,2013-05-07T18:06:24Z,PLAY 
B,2013-04-23T12:18:41Z,PLAY 
D,2013-04-29T12:00:16Z,PLAY 
A,2013-03-27T12:09:37Z,PLAY 
A,2013-04-16T18:31:44Z,PLAY",stringsAsFactors=F) 

# filter by PLAY 
plays <- DF[DF$action == "PLAY",] 

# create means by user 
byRes <- 
by(plays, plays$user, 
    FUN=function(grp){ 
     dates <- as.POSIXlt(grp$time,format="%Y-%m-%dT%H:%M:%S", tz = "GMT") 
     data.frame(user=grp$user[1],AvgHour=mean(dates$hour)) 
    }) 

# put the "by" result into a data.frame 
res <- do.call(rbind,byRes) 


# result : 
> res 
    user AvgHour 
A A 14.66667 
B B 12.00000 
D D 15.00000 
+0

是的,我一直在寻找。非常感谢。它完美的工作! :) – Cormac