我有一个文本文件,其中包含按下相关按钮的时间戳。 我用R studio将它加载到R中。 按下按钮的格式为字符串。
52 right 08:16:23
53 a 08:16:23
54 up 08:16:24
55 a 08:16:24
56 b 08:16:24
57 a 08:16:24
58 a 08:16:24
59 right 08:16:24
60 a 08:16:24
时间戳已转换为POSIXct时间戳,但在我的文本文件中包含单独的日期和时间字段。
我希望根据时间将数据分成等间距的分档,并计算其中每个按钮的频率。
有一些按钮,并且有许多不同的非唯一时间戳。
理想情况下,我喜欢小到一分钟的间隔,并且允许我更改粒度的解决方案会很棒。
答案 0 :(得分:1)
您可能会对这些功能感兴趣:
答案取决于时间是否被R识别。如果不是,则可以使用
chron( ... )
关于你的时间变量。请参阅:http://www.stat.berkeley.edu/~s133/dates.html
c <- cut(time_variable, number_of_bins)
这应该得到时间变量的最大值和最小值,将范围除以箱子的数量,然后将每个时间分配给适当的箱子
table(c)
这将返回每个bin中的频率
答案 1 :(得分:1)
假设您有一个名为“dat”的data.frame,并且时间值位于名为“V3”的列中,因为它位于我创建的文本中。然后使用seq.POSIXct
以一分钟的间隔只创建一个点,切割无法处理,所以我开始添加不同的值。在这个过程中,我发现我使用seq.POSIXct的初始尝试返回NA为上限值,因为如果秒数在最大时间内高于最小时间,则序列结束,所以我在最大值上加60秒。作为此演示的间隔。您应该能够在明显的位置概括代码。
# Initial failed attempt with your data
> grp <- cut(dat$time, breaks=seq(min(dat$time), max(dat$time), by="1 min"), include.lowest=TRUE)
Error in cut.default(unclass(x), unclass(breaks), labels = labels, right = right, :
'breaks' are not unique
# Better data, more challenging, allows better testing
dat$grp <- cut(dat$time, breaks=seq(min(dat$time),
max(dat$time)+60, by="1 min"),
include.lowest=TRUE,right=TRUE)
> dat
V1 V2 V3 time grp
1 52 right 08:16:23 2016-04-17 08:16:23 2016-04-17 08:15:24
2 53 a 08:16:23 2016-04-17 08:16:23 2016-04-17 08:15:24
3 54 up 08:17:59 2016-04-17 08:17:59 2016-04-17 08:17:24
4 55 a 08:18:45 2016-04-17 08:18:45 2016-04-17 08:18:24
5 56 b 08:20:53 2016-04-17 08:20:53 2016-04-17 08:20:24
6 57 a 08:20:01 2016-04-17 08:20:01 2016-04-17 08:19:24
7 58 a 08:17:5 2016-04-17 08:17:05 2016-04-17 08:16:24
8 59 right 08:18:24 2016-04-17 08:18:24 2016-04-17 08:17:24
9 60 a 08:14:24 2016-04-17 08:14:24 2016-04-17 08:14:24
您可以使用表格按组获取计数:
> table(dat$grp)
2016-04-17 08:14:24 2016-04-17 08:15:24 2016-04-17 08:16:24 2016-04-17 08:17:24
1 2 1 2
2016-04-17 08:18:24 2016-04-17 08:19:24 2016-04-17 08:20:24
1 1 1
有关处理缺失值的其他选项,请参阅?table
。