2017-04-07 3 views
1

短編小説:私の分析を行っている間、私は曜日と週の値を忘れていました。私はそれらを私のテーブルに追加する必要があります。特定のタイムスタンプの後に行を追加する

長い物語: 私はこのテーブルを持っている:

library(tidyverse) 
library(lubridate) 
df<-structure(list(time = structure(c(1488987000, 1488988800, 1488990600, 
             1488992400, 1488994200, 1488996000, 1488997800, 1488999600, 1489001400, 
             1489003200, 1489005000, 1489006800, 1489069800, 1489071600, 1489073400, 
             1489075200, 1489077000, 1489078800, 1489080600, 1489082400, 1489084200, 
             1489086000, 1489087800, 1489089600, 1489091400, 1489093200, 1489156200, 
             1489158000, 1489159800, 1489161600, 1489163400, 1489165200, 1489167000, 
             1489168800, 1489170600, 1489172400, 1489174200, 1489176000, 1489177800, 
             1489179600, 1489411800, 1489413600, 1489415400, 1489417200, 1489419000 
), class = c("POSIXct", "POSIXt"), tzone = structure("America/New_York", .Names = "TZ")), 
low.yields = c(0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
       0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0)), .Names = c("time", 
                   "low.yields"), row.names = c(NA, -45L), class = c("tbl_df", "tbl", 
                                "data.frame")) 

2列、タイムスタンプ、およびダミー変数があります。

タイムスタンプ16:00に表示可能な時間を持つすべての行を追加してレプリケートし、タイムスタンプを9:00に変更しますが、次の行と同じ日に変更したいとします。これは翌日である必要はないことに注意してください。ただし、週末になる可能性もあります。

今まで私は機能tibble::add_rowを見つけましたが、特定の行をどのように複製するかはわかりません。しかし、私が行う場合

df %>% add_row(.after = which(hour(df$time) == 16)) 

私は最初の値ではなく、すべての空白行を取得します。このとき

は、表は次のようになります。その後

time     low.yields 
    ...     ... 
26 2017-03-09 16:00:00 1 
27 2017-03-10 09:30:00 0 
    ...     ... 

、私はそれは次のようになりたいと思います。時間は下の行よりも30分少なく、low.yields値は上の行から継承されます。これは、16:00の時間がある行ごとに実行されます。

time     low.yields 
    ...     ... 
26 2017-03-09 16:00:00 1 
27 2017-03-10 09:00:00 1 
28 2017-03-10 09:30:00 0 
    ...     ... 
+1

予想される出力を追加してください。 –

+0

あなたは '.after'だけを指定しましたが、値はどうですか? – akrun

+0

こんにちは、申し訳ありません、私はさらに説明を追加しました。現時点では、正しい行を特定できないため、値を気にしませんでした。ご関心をお寄せいただきありがとうございます。 – johnnyheineken

答えて

0

@akrunの大きな助けを得て、私は私の問題を解決するようになりました。

df %>% 
    filter(hour(time)==16) %>% 
    mutate(time = as.POSIXct(paste(as.Date(time), "09:00:00"), tz = "America/New_York")) %>% 
    mutate(time = time + days(ifelse(wday(time) == 6, 3, 1))) %>% 
    bind_rows(df, .) %>% 
    arrange(time) 

ありがとうございます。

関連する問題