6

何かが起こってからの経過時間を計算したい。

次の例では、ライトが常にオンになっているわけではなく、時々オンになっていることがわかります。データを正規化してニューラル ネットワークにフィードしたいと考えています。

library(data.table)
d<-data.table(
    date = c("6/1/2013", "6/2/2013","6/3/2013","6/4/2013"),
    light = c(TRUE,FALSE,FALSE,TRUE) 
)
d
       date light
1: 6/1/2013  TRUE
2: 6/2/2013 FALSE
3: 6/3/2013 FALSE
4: 6/4/2013  TRUE

私が計算したいのは、最後の出現までの「距離」を示す別の列です。

上記のデータの場合: 最初の行は、その上にあるため、2 行目は 1 である必要があり、3 行目は 2 である必要があります。

4

3 に答える 3

4

これはそれを行う必要があります:

d[, distance := 1:.N - 1, by = cumsum(light)]

またはこれ:

d[, distance := .I - .I[1], by = cumsum(light)]

また、行距離ではなく実際に日数をカウントしたい場合は、次を使用できます。

d[, distance := as.numeric(as.POSIXct(date, format = "%m/%d/%Y") -
                           as.POSIXct(date[1], format = "%m/%d/%Y"),
                           units = 'days'),
    by = cumsum(light)]
于 2013-07-08T18:09:01.763 に答える
2

rleランレングス エンコーディング ( ) およびsequence(のラッパーである)を使用するアプローチunlist(lapply(nvec, seq_len))

d[, distance := sequence(rle(light)$lengths)][(light), distance := 0]
于 2013-07-08T04:48:17.147 に答える