2015-01-09 7 views
7

POSIXctタイムクラスを使用することの利点を維持しながら、これらのデータを使用して毎週平均Distを計算します。POSIXct date vaulesを毎週の初日に変更する

df <- structure(list(IndID = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), class = "factor", .Label = "AAA"), 
    Date = structure(c(1329436800, 1329458400, 1329480000, 1329501600, 
    1329523200, 1329544800, 1329566400, 1329588000, 1329609600, 
    1329631200, 1329652800, 1329674400, 1329696000, 1329717600, 
    1329739200, 1329760800, 1329782400, 1329804000, 1329825600, 
    1329847200, 1329868800, 1329890400, 1329912000, 1329933600, 
    1329955200, 1329976800, 1329998400, 1330020000, 1330041600, 
    1330063200, 1330084800, 1330106400, 1330128000, 1330149600, 
    1330171200, 1330192800, 1330214400, 1330236000, 1330257600, 
    1330279200, 1330300800, 1330322400, 1330344000, 1330365600, 
    1330387200, 1330408800, 1330430400, 1330452000, 1330473600, 
    1330495200), class = c("POSIXct", "POSIXt"), tzone = ""), 
    Dist = c(3.85567120344727, 52.2649622620809, 1043.61207930222, 
    1352.58506343616, 176.911523081261, 77.8266318470078, 50.3943567710686, 
    296.753649985307, 70.5826583995618, 166.394264991861, 251.745346701973, 
    295.70655057823, 44.6664731663839, 11.1539274078084, 124.578071475754, 
    757.728373470112, 83.0921234152083, 36.6820839851181, 29.1406161870034, 
    150.442928003814, 66.0957159105813, 2.23839297570488, 184.88312900824, 
    513.072526047611, 132.868335201626, 8.09274857805967, 284.479977841835, 
    479.358187122796, 297.273840894826, 4.00676616275076, 601.492189218489, 
    249.001525522847, 108.007775719885, 2.38435966274261, 604.365702677913, 
    1499.59076416313, 111.74722960012, 25.3528529967124, 280.057754683142, 
    428.157539641219, 70.0365608334965, 71.0886617898624, 265.823654634254, 
    380.247565078552, 188.857338305481, 9.24402933768915, 120.346786301264, 
    221.904294953242, 201.086079767386, 81.7857577639103), DoW = c(5, 
    5, 6, 6, 6, 6, 7, 7, 7, 7, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 
    3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 1, 
    1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3)), .Names = c("IndID", "Date", 
"Dist", "DoW"), row.names = c(NA, -50L), class = "data.frame") 

> head(df) 
    IndID    Date  Dist DoW 
1 AAA 2012-02-16 17:00:00 3.855671 5 
2 AAA 2012-02-16 23:00:00 52.264962 5 
3 AAA 2012-02-17 05:00:00 1043.612079 6 
4 AAA 2012-02-17 11:00:00 1352.585063 6 
5 AAA 2012-02-17 17:00:00 176.911523 6 
6 AAA 2012-02-17 23:00:00 77.826632 6 

私の考えは週平均Distplyrパッケージを使用していたし、最初の週の最初の日の、時間を除いて、日付を含む新しいWeekDate場を作りたかったのです。 DoW(曜日)フィールドに表示されているように、データは必ずしも週の最初の曜日に開始するとは限りません。 M:S)各シーケンシャル週(ダウ1-7)のための

私はドットを接続するように見えることはできませんが

は、私は時間を除いた分で日付をしたいです。

行1:10私はlubridateパッケージを疑う 行39:50に2012年2月26日

なり、 行11:38は、2012年2月19日となり、2012年2月16日になります参考になりますが、正しいコードを取得できません。

新しい日付列を具体的に作成する方法や、毎週Distを平均的に平均化する方法については、何か提案や代替方法があります。

+0

パーフェクト。喜んで答えを受け入れるだろう。ありがとう! –

答えて

10

library(lubridate) 
library(dplyr) 
df %>% 
    group_by(Week = floor_date(Date, unit="week")) %>% 
    summarize(WeeklyAveDist=mean(Dist)) 
#Source: local data frame [3 x 2] 
# 
#  Week WeeklyAveDist 
#1 2012-02-12  381.7755 
#2 2012-02-19  252.1116 
#3 2012-02-26  175.4097 

plyrの懐の仲間を使用してceiling_dateround_dateオプションもあります。

+1

slick。二人!とても有難い。 –

+2

できればこれを2回投票したいと思います。 +1の潤滑油。 –

3

あなたは%W形式でstrftimeを使用することができます。

> strftime(as.Date("2015-01-08"), "%W") 
[1] "01" 

あなたはこの変数によって集計して新しい変数を定義するためにこれを使用して可能性があります。たぶんこれ

> df <- transform(df, week=strftime(Date, "%W")) 
> aggregate(df$Dist, by=list(df$week), FUN=mean) 
    Group.1  x 
1  07 319.8861 
2  08 254.2861 
3  09 161.0421 
関連する問題