我想為每個 house_id、頻道組合提取過去 3 周的資料。過去 3 周將根據惡意周數和惡意年數計算,并且會小于每個 home_id 和頻道組合的值。
下面是資料集:

例如,通道 A 的家庭 id 100 惡意周是 42 年和惡意年 2021。因此過去的三個記錄將小于 2021 年的第 42 周。這將根據周和年列計算
對于家庭 id 100 和頻道 B 組合,只有兩條記錄比 mala_fide_week 和 mala_fide_year 少得多。
對于 Household_id 101 和頻道 C,涉及 2019 年和 2020 年的兩年。
最終資料集如下

Household_id 102 不被視為周和年大于惡意周和惡意年。
我正在嘗試多種選擇,但沒有通過。任何幫助深表感謝!
樣本資料集:
data <- data.frame(Household_id =
c(100,100,100,100,100,100,101,101,101,101,102,102),
channel = c("A","A","A","A","B","B","C","C","c","C","D","D"),
duration = c(12,34,567,67,34,67,98,23,56,89,73,76),
mala_fide_week = c(42,42,42,42,42,42,5,5,5,5,30,30),
mala_fide_year =c(2021,2021,2021,2021,2021,2021,2020,2020,2020,2020,2021,2021),
week =c(36,37,38,39,22,23,51,52,1,2,38,39),
year = c(2021,2021,2021,2021,2020,2020,2019,2019,2020,2020,2021,2021))
uj5u.com熱心網友回復:
我認為您首先需要獲取絕對周數week year * 52,然后進行相應過濾。slice_tail獲取每組的最后三行。
library(dplyr)
data |>
filter(week 52*year <= mala_fide_week 52 *mala_fide_year) |>
group_by(Household_id, channel) |>
arrange(year, week, .by_group = TRUE) |>
slice_tail(n = 3)
# A tibble: 8 x 7
# Groups: Household_id, channel [3]
Household_id channel duration mala_fide_week mala_fide_year week year
<dbl> <chr> <dbl> <dbl> <dbl> <dbl> <dbl>
1 100 A 34 42 2021 37 2021
2 100 A 567 42 2021 38 2021
3 100 A 67 42 2021 39 2021
4 100 B 34 42 2021 22 2020
5 100 B 67 42 2021 23 2020
6 101 C 23 5 2020 52 2019
7 101 C 56 5 2020 1 2020
8 101 C 89 5 2020 2 2020
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/430597.html
標籤:r
上一篇:在一個圖中繪制計數和累積數
