提前致谢!
我有每五分钟收集一次的时间序列数据,其头部()看起来像......
PumaID CollarID Type GMT_Date GMT_Time LMT_Date LMT_Time ActivityX
1 P01 2905 Argos 1/1/2000 12:15:00 AM 1/1/2000 12:00:00 AM 0
2 P01 2905 Argos 1/1/2000 12:25:00 AM 1/1/2000 12:00:00 AM 0
3 P01 2905 Argos 1/1/2000 12:00:00 AM 1/1/2000 12:00:00 AM 0
4 P01 2905 Argos 2/21/2011 9:15:00 PM 2/21/2011 2:15:00 PM 0
5 P01 2905 Argos 2/21/2011 9:20:00 PM 2/21/2011 2:20:00 PM 18
6 P01 2905 Argos 2/21/2011 9:25:00 PM 2/21/2011 2:25:00 PM 14
ActivityY ActivitySum DayNight Temp
1 0 0 Night 22
2 0 0 Night 22
3 0 0 Night 21
4 0 0 Day 21
5 21 39 Day 20
6 15 29 Day 21
我需要将ActivitySum列聚合为12小时的间隔。使用下面的代码,我在表格中读到,将日期列更改为正确的格式,并在白天汇总数据。
P01 <- read.csv( "ActDtaP01_ALL_Temp.csv" )
date <- as.Date(P01$GMT_Date, "%m/%d/%Y")
new <- aggregate(P01, by = list(date), mean)
导致此(下文)。我的具体问题是:
Group.1 PumaID CollarID Type GMT_Date GMT_Time LMT_Date LMT_Time ActivityX
1 2000-01-01 NA 2905 NA NA NA NA NA 0.000000
2 2011-02-21 NA 2905 NA NA NA NA NA 8.727273
3 2011-02-22 NA 2905 NA NA NA NA NA 0.000000
4 2011-02-23 NA 2905 NA NA NA NA NA 0.000000
5 2011-02-24 NA 2905 NA NA NA NA NA 0.000000
6 2011-02-25 NA 2905 NA NA NA NA NA 0.000000
ActivityY ActivitySum DayNight Temp
1 0.000000 0.00000 NA 21.6666667
2 9.060606 17.78788 NA 12.6969697
3 0.000000 0.00000 NA -2.8521127
4 0.000000 0.00000 NA -1.4471831
5 0.000000 0.00000 NA 0.3485915
6 0.000000 0.00000 NA 1.3368421
1)如何在每天(24小时)内将其进一步分为12小时间隔,从而产生类似的东西......
Group.1 Group.2 PumaID CollarID etc…
2/21/2011 Day P01 …
2/21/2011 Night P01 …
2/22/2011 Day P01 …
2/22/2011 Night P01
2)如果无法计算FUN参数(在本例中为平均值),如何将所有列值保留在数据表中而不是返回NA?
再次感谢!
答案 0 :(得分:0)
你没有一个特别好的数据集来测试代码,因为你只有第一个数据的情况和第二个的pm情况,但这将按日期和am / pm指标进行双向分类在时间栏中。我还从考虑中删除了所有非数字列,因为询问因子的平均值是没有意义的。
new2 <- aggregate(dat[unlist(lapply(dat, is.numeric))],
by = list(date, gsub("^.+ ", "", dat$GMT_Time) ), mean)
new2
Group.1 Group.2 CollarID ActivityX ActivityY ActivitySum Temp
1 2000-01-01 AM 2905 0.00000 0 0.00000 21.66667
2 2011-02-21 PM 2905 10.66667 12 22.66667 20.66667
gsub
调用正在删除字符串开头和空格的最后一个实例之间的任何字符。您可以通过向列表中添加ID变量来最好地完成第二个请求。
> new <- aggregate(dat[unlist(lapply(dat, is.numeric))],
by = list(Date=date,
AMPM= gsub("^.+ ", "", dat$GMT_Time),
Type=dat$Type ), mean)
> new
Date AMPM Type CollarID ActivityX ActivityY ActivitySum Temp
1 2000-01-01 AM Argos 2905 0.00000 0 0.00000 21.66667
2 2011-02-21 PM Argos 2905 10.66667 12 22.66667 20.66667