私は現在、この形式のデータフレームを持っています:
week A_Revenue B_Revenue C_Revenue D_Revenue A_P_pct.chg B_P_pct.chg C_P_pct.chg D_P_pct.chg
34 8465.9 12299.98 10621 1548.375 59.50223 34.06917 41.46715 -3.305127
33 5307.7 9174.35 7507.75 1601.3 NA NA NA NA
どうすればそれについて行くことができますか?tidyr :: pivot_longer(2:5)を試しました。これにより、収益ソースがスタンドアロンの列として表示されますが、毎週の収益をそれぞれの列に取り込むことができませんでした。
編集:完全なデータセットには、私が追加する毎日のトランザクションが含まれています。
dat$week <- format(dat$Date, format = "%V")
それらの日の週の範囲を含める。次に、次のコードを使用して目的の週をフィルタリングします。
dat1 <- dat %>%
filter(between(week, todays_week - 2, todays_week - 1)) %>%
group_by(week) %>%
summarise(A_Revenue = sum(A_Revenue),
B_Revenue = sum(B_Revenue),
C_Revenue = sum(C_Revenue),
D_Revenue = sum(D_Revenue)) %>%
mutate(A_P_pct.chg = 100 * ((A_Revenue - lag(A_Revenue))/lag(A_Revenue)),
B_P_pct.chg = 100 * ((B_Revenue - lag(B_Revenue))/lag(B_Revenue)),
C_P_pct.chg = 100 * ((C_Revenue - lag(C_Revenue))/lag(C_Revenue)),
D_P_pct.chg = 100 * ((D_Revenue - lag(D_Revenue))/lag(D_Revenue)))
これにより、簡単に比較できるように提供された画像に再形成しようとしている、投稿された最初のデータフレームが生成されます。
代わりに、異なる列ごとに計算するあなたは、長い形式と計算のデータを取得することができますsum
し、pct.change
それぞれのためにname
。
library(dplyr)
todays_week = lubridate::week(Sys.Date())
dat %>%
filter(between(week, todays_week - 2, todays_week - 1)) %>%
tidyr::pivot_longer(cols = ends_with('Revenue')) %>%
group_by(name, week) %>%
summarise(value = sum(value, na.rm = TRUE)) %>%
mutate(rev_prev_week = lag(value),
pct_change = (value - rev_prev_week)/rev_prev_week * 100)
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加