データフレームに変数、値(NAsで始まる)、およびその値が有効な時間があります。私は、あなたは値がデータフレーム内ですばやく移動したかどうかを確認
example <- data.frame(variable = c('a', 'a', 'a', 'a', 'a', 'b', 'b', 'b', 'b', 'b', 'b', 'b', 'b'),
time = c(Sys.time(), Sys.time() + 5, Sys.time() + 15, Sys.time() + 34, Sys.time() + 151, Sys.time(), Sys.time() + 1, Sys.time() + 5, Sys.time() + 77, Sys.time() + 79, Sys.time() + 102, Sys.time() + 110, Sys.time() + 145),
value = c(NA, 3, 6, 2, 8, NA, 15, 11, 8, 6, 4, 0, 3))
に 「早く」移動は、例えば、過去分
以上5ずつ増加/減少として定義され、ここに私のデータフレームがある
、値が急速に最近変更されたかどうかを判断したいです :コードlibrary(ggplot2)
ggplot(example, aes(x = time, y = value, by = variable)) + geom_step()
私は値が過去分に5つ以上で移動しているかどうかを示すboolean型の列を追加したいので、次で終わるだろうを使用してデータを視覚化することができます
variable time value fast_move
1 a 2017-11-06 15:59:10 NA FALSE
2 a 2017-11-06 15:59:15 3 FALSE
3 a 2017-11-06 15:59:25 6 FALSE
4 a 2017-11-06 15:59:44 2 FALSE
5 a 2017-11-06 16:01:41 8 TRUE
6 b 2017-11-06 15:59:10 NA FALSE
7 b 2017-11-06 15:59:11 15 FALSE
8 b 2017-11-06 15:59:15 11 FALSE
9 b 2017-11-06 16:00:27 8 FALSE
10 b 2017-11-06 16:00:29 6 FALSE
11 b 2017-11-06 16:00:52 4 TRUE
12 b 2017-11-06 16:01:00 0 TRUE
13 b 2017-11-06 16:01:35 3 FALSE
行5は、1回で2から8(6の変化)になったので、TRUE
です。それは8に15から移動してきたが、それは行11
60秒かけてこれをしなかったので
行9はFALSE
あり、それは26秒で11から4に行っているためTRUE
である(16で11でした。 00:26と4:16:52:00)。同様に行12はTRUE
です。実際のデータフレームは、多くの変数を持つ1,000,000行を超えていますので、特に遅いものは問題になることがあります。
すべてのヘルプは、私がこれまで行っているかについて、ユーザーのコメントに答えるために
EDIT
をいただければ幸いです...
は、私は現在値は60だったものを発見しました秒前に、そして差を計算しました。これが> 5の場合、fast_moveをTRUEに設定します。この
isFastMove <- function(data){ library(data.table) data <- data %>% unique() %>% data.table prevData <- mutate(data, time = time - 60) %>% select(-value) %>% data.table setkeyv(data, c('variable', 'time')) setkeyv(prevData, c('variable', 'time')) prevData <- data[prevData, roll = T, rollends = T] %>% mutate(time = time + 60) %>% rename(previous_value = value) data <- merge(data, prevData, by = c('variable', 'time')) %>% mutate(fast_move = !is.na(previous_value) & abs(value - previous_value) > 5) return(data) }
を行うには、次のコードを使用した値が3であった場合は、これは常に、その後、例えば、動作しない1に低下し、すぐに7に増加これは速い動きになりますが、私が30秒前と比較すると3となり、速い動きとして分類されませんでした。
を? – useR
現時点では、私は60秒前の値を見つけ、差異を計算しました。これが> 5の場合、fast_moveをTRUEに設定します。しかし、これは必ずしも有効ではありません。たとえば、値が3の場合、1に落ちて直ちに7に増加します。これは速い動きですが、30秒前と比較すると3となり、速い動きとして分類されません – user1165199
これまでに試したコードを投稿して、それがあなたに期待しない理由を説明できますか?あなたの質問に出力?これをコメントとして投稿しない – useR