2017-09-12 3 views
1

私は以下のdplyrコードを使用して、1分間の時系列データから時間平均を生成しています。コードは何ヶ月も働いていますが、最近問題のある結果が出ています。次のいずれかの機能で変更されましたか:group_by()cut()、またはsummarise()dplyr code "df%>%group_by(date = cut(date、breaks =" 1 hour "))"は望みの結果を生成しません。

df <- structure(list(date = structure(c(1505187300, 1505187360, 1505187420, 1505187480, 1505187540, 1505187600, 1505187660, 1505187720, 1505201580, 1505201640), class = c("POSIXct", "POSIXt"), tzone = "UTC"), co = c(0.149,0.149,0.149, 0.106, 0.149, 0.149, 0.192, 0.149, 0.149, 0.149), co2 = c(544L, 545L, 544L, 543L, 546L, 546L, 548L, 547L, 549L, 554L), VOC = c(22.55, 22.55, 22.8198, 23.2602, 22.9501, 23.2154, 23.4262, 23.0231, 23.0525, 22.7911), RH = c(77.02, 76.9, 77.2, 76.6, 76.99, 76.83, 77.13, 77.81, 77.48, 77.1), ugm3 = c(12.862, 13.408, 14.188, 12.342, 13.278, 12.81, 10.834, 13.018, 12.992, 12.498), temp = c(62.06, 62.02, 62.02, 61.98, 61.94, 61.9, 61.86, 61.78, 61.8, 61.8)), .Names = c("date", "co", "co2", "VOC", "RH", "ugm3", "temp"), row.names = c(NA, 10L), class = "data.frame") 

new_df <- df %>% 
    group_by(date = cut(date, breaks = "1 hour")) %>% 
    summarize(co = mean(co), co2 = mean(co2), VOC = mean(VOC), RH = mean(RH), ugm3 = mean(ugm3), temp = mean(temp)) 

new_df 

予想される出力:

expected_output <- structure(list(date = structure(c(1L, 5L), .Label = c("2017-09-12 03:00:00", "2017-09-12 04:00:00", "2017-09-12 05:00:00", "2017-09-12 06:00:00", "2017-09-12 07:00:00"), class = "factor"), co = c(0.149, 0.149), co2 = c(545.375, 551.5), VOC = c(22.97435, 22.9218), RH = c(77.06, 77.29), ugm3 = c(12.8425, 12.745), temp = c(61.945, 61.8)), class = c("tbl_df", "tbl", "data.frame"), .Names = c("date", "co", "co2", "VOC", "RH", "ugm3", "temp"), row.names = c(NA, -2L)) 

実際の出力:今週の

actual_output <- structure(list(co = 0.149, co2 = 546.6, VOC = 22.96384, RH = 77.106, ugm3 = 12.823, temp = 61.916), .Names = c("co", "co2", "VOC", "RH", "ugm3", "temp"), class = "data.frame", row.names = c(NA, -1L)) 

前に、このコードは、新しいdf 2との観測を生成しているだろう、1のために03:00:00時間、の1つ時。 group_by()関数は、新しい時間別タイムスタンプを正しく割り当てているように見えますが、summarize()関数は正しく動作していません。どんな洞察にも感謝します。ありがとう!

時系列データを特定の間隔で集約するより堅牢な代替手段がある場合、私はすべて耳にします!

+1

私はあなたの期待する出力を得ます、あなたは何を得ることができますか? –

+0

良いアイデア、提案のおかげで! – spacedSparking

+1

group_byがスキップされたようです –

答えて

3

dplyrの後にplyrをロードしました。

library(dplyr) 
# ... 
library(plyr) 
# ------------------------------------------------------------------------------# ------------------------------------------- 
# 
# Attachement du package : ‘plyr’ 
# 
# The following objects are masked from ‘package:dplyr’: 
# 
#  arrange, count, desc, failwith, id, mutate, rename, summarise, summarize 

私たちは常にこれらの警告を読むべきです:)。

df %>% 
    group_by(date = cut(date, breaks = "1 hour")) %>% 
    summarize(co = mean(co), co2 = mean(co2), VOC = mean(VOC), RH = mean(RH), ugm3 = mean(ugm3), temp = mean(temp)) 
#  co co2  VOC  RH ugm3 temp 
# 1 0.149 546.6 22.96384 77.106 12.823 61.916 

あなたはplyrdplyrを読み込む、またはdplyr::summarizeを使用する場合は、あなたが予想される動作があるでしょう:それでは、何が起こるか見てみましょう。

df %>% 
    group_by(date = cut(date, breaks = "1 hour")) %>% 
    dplyr::summarize(co = mean(co), co2 = mean(co2), VOC = mean(VOC), RH = mean(RH), ugm3 = mean(ugm3), temp = mean(temp)) 
# # A tibble: 2 x 7 
#     date co  co2  VOC RH ugm3 temp 
#    <fctr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> 
# 1 2017-09-12 03:00:00 0.149 545.375 22.97435 77.06 12.8425 61.945 
# 2 2017-09-12 07:00:00 0.149 551.500 22.92180 77.29 12.7450 61.800 
関連する問題