2017-07-04 2 views
-1

データフレームの列にラグを使用しようとしましたが、時間がかかればそれは機能しません。私はシフト、ラグ、トラッグを試みました。Rリードとラグ(シフト)with times

例:

y = strptime(sprintf("%s:%s:%s", 4, 20, 10), "%H:%M:%S") 
yy = strptime(sprintf("%s:%s:%s", 10, 20, 10), "%H:%M:%S") 
lag(c(y,yy)) 

format.POSIXltでのエラー(X、usetz = usetz): 無効成分[10] "POSIXlt" でなければならない 'ゾーン'

n_distinct_multiで

tlag(c(y,yy))

エラー(リスト(...)、na.rm):デフォルトなし

shift(c(y,yy)) 
[[1]] 
[1] NA 10 

[[2]] 
[1] NA 20 

[[3]] 
[1] NA 4 

[[4]] 
[1] NA 4 

[[5]] 
[1] NA 6 

[[6]] 
[1] NA 117 

[[7]] 
[1] NA 2 

[[8]] 
[1] NA 184 

[[9]] 
[1] NA 1 

[[10]] 
[1] NA "BST" 

[[11]] 
[1] NA 3600 

と私はすべての時間差を望んでいない「時間」が不足している引数が、私は単に私が何ラグをやったと思った私のデータフレーム、上記の行から値をしたいです: "リードとラグは定数でオフセットされた値を比較するのに便利です(例:前回または次の値) "。 時刻は重要ではありません。前の位置から数値/文字/時間を選択するだけです。これを修正するにはどうすればよいですか、それとも、 「好きdは - スピードが重要であり、データフレームが大きいように私はすべてのループが関与したくない

私のデータフレームからの例:。data.frameについては

structure(list(sec = c(52, 53, 54, 55, 56, 57, 58, 59, 0, 1), 
    min = c(50L, 50L, 50L, 50L, 50L, 50L, 50L, 50L, 51L, 51L), 
    hour = c(11L, 11L, 11L, 11L, 11L, 11L, 11L, 11L, 11L, 11L 
    ), mday = c(4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L), mon = c(6L, 
    6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L), year = c(117L, 117L, 
    117L, 117L, 117L, 117L, 117L, 117L, 117L, 117L), wday = c(2L, 
    2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L), yday = c(184L, 184L, 
    184L, 184L, 184L, 184L, 184L, 184L, 184L, 184L), isdst = c(1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), zone = c("BST", "BST", 
    "BST", "BST", "BST", "BST", "BST", "BST", "BST", "BST"), 
    gmtoff = c(NA_integer_, NA_integer_, NA_integer_, NA_integer_, 
    NA_integer_, NA_integer_, NA_integer_, NA_integer_, NA_integer_, 
    NA_integer_)), .Names = c("sec", "min", "hour", "mday", "mon", 
"year", "wday", "yday", "isdst", "zone", "gmtoff"), class = c("POSIXlt", 
"POSIXt")) 
+1

を使用することができますリード/ラグ列を追加します。私が疑問に思うのは、あなたがしたいことは、突然変異と遅れを使った整然としたアプローチではかなりストレートですが、現時点で見るのは難しいことです。 – JanLauGe

+0

予想される出力は何ですか? – AK88

+0

データフレームは、上記のベクトルと同じように動作します。予想される「NA」の代わりにエラーが表示されます。2017-07-04 04:20:10 BST「 ' – Olivia

答えて

1

index    time 
1  1 2017-07-04 04:20:10 
2  2 2017-07-04 10:20:10 
以下のような

を使用できます

dplyr::lag(df$time, 1) 
[1] NA       "2017-07-04 04:20:10 CEST" 

dplyr::lead(df$time, 1) 
[1] "2017-07-04 10:20:10 CEST" NA   

そして、あなたのdata.frameあなたはあなたがテキストで言及したデータフレームを含む再現可能な例を投稿する方が良いだろう

dplyr::mutate(df, lead_1 = dplyr::lead(time, 1), lag_1 = dplyr::lag(time, 1)) 
    index    time    lead_1    lag_1 
1  1 2017-07-04 04:20:10 2017-07-04 10:20:10    <NA> 
2  2 2017-07-04 10:20:10    <NA> 2017-07-04 04:20:10   
+0

なぜPOSIXltを使用するのはmutate内で動作しますが、mutateを使用しないと私はPOSIXctに変換する必要がありますか? – Olivia