グループごとに連続した行の値の差を計算する
2023-11-14 06:32:58
質問
これは、私の
df
(data.frame)を使用しています。
group value
1 10
1 20
1 25
2 5
2 10
2 15
連続した行の値の差をグループ別に計算したいのですが。
なので、その結果が必要です。
group value diff
1 10 NA # because there is a no previous value
1 20 10 # value[2] - value[1]
1 25 5 # value[3] value[2]
2 5 NA # because group is changed
2 10 5 # value[5] - value[4]
2 15 5 # value[6] - value[5]
しかし,この問題は
ddply
を使うことで対処できますが、時間がかかりすぎます。というのも、私の場合、多くのグループが
df
. (の中に1,000,000以上のグループがあるからです。
df
)
この問題を処理するために、他に有効なアプローチはありますか?
どのように解決するのですか?
パッケージ
data.table
を使うと、かなり素早くこれを行うことができます。
shift
関数を使用することで、かなり迅速に行うことができます。
require(data.table)
df <- data.table(group = rep(c(1, 2), each = 3), value = c(10,20,25,5,10,15))
#setDT(df) #if df is already a data frame
df[ , diff := value - shift(value), by = group]
# group value diff
#1: 1 10 NA
#2: 1 20 10
#3: 1 25 5
#4: 2 5 NA
#5: 2 10 5
#6: 2 15 5
setDF(df) #if you want to convert back to old data.frame syntax
または
lag
関数で
dplyr
df %>%
group_by(group) %>%
mutate(Diff = value - lag(value))
# group value Diff
# <int> <int> <int>
# 1 1 10 NA
# 2 1 20 10
# 3 1 25 5
# 4 2 5 NA
# 5 2 10 5
# 6 2 15 5
代替のプレ
data.table::shift
とプリ
dplyr::lag
は、編集を参照してください。
関連
-
Rによる系統的クラスタリング(階層)分析のグラフ形式の完全版
-
[解決済み] Rでデータフレームに行を追加する方法は?
-
[解決済み] Rの%*%の意味 [重複]について
-
[解決済み] require()とlibrary()の違いは何ですか?
-
[解決済み] なぜ `[`] は `subset` よりも優れているのですか?
-
[解決済み] データフレーム内の列を名前でドロップする方法
-
[解決済み] [Solved] data.frameで全てまたは一部のNA(欠損値)を含む行を削除する。
-
[解決済み】data.table vs dplyr:一方がうまくできない、またはうまくできないことを行うことができますか?
-
[解決済み】data.frameのグループごとの平均値【重複】について
-
[解決済み] 2つの単語の最初の文字を大文字にします。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Rでファイルを読み込む際に、そのようなファイルまたはディレクトリが見つかりません。
-
DEG解析で'row.names'に重複した名前を付けられない場合の解決法
-
[解決済み] "エラーです。Rでテーマの書式を保存する際に「Don't know how to add RHS to the theme object」(テーマオブジェクトにRHSを追加する方法がわかりません)と表示されます。
-
[解決済み] Rでデータフレームに行を追加する方法は?
-
[解決済み] Rでcは何をするのですか?重複] [重複
-
[解決済み] パッケージ 'xxx' は利用できません (for R version x.y.z) 」という警告にどのように対処したらよいですか?
-
[解決済み] Rでtrycatchの書き方
-
[解決済み] ggplotで凡例のタイトルを変更する方法
-
[解決済み】RでCRANミラーを選択する方法
-
[解決済み] FUN内のlapplyインデックス名へのアクセス