我有一張看起來像下面這樣的表格
| 日期 | 鑰匙 | 公制 |
|---|---|---|
| 2021-01-01 | 一種 | 6 |
| 2021-02-01 | 一種 | 3 |
| 2021-05-01 | 一種 | 3 |
| 2021-03-01 | 乙 | 4 |
| 2021-04-01 | 乙 | 1 |
| 2021-05-01 | 乙 | 2 |
我想要做的是在 2021-03-01 的日期為 Key A 插入一個度量為 0 的行,因為 Key A 已經在二月份的一月份出現了。
另一方面,鍵 B 最好保持不變,因為它具有與出現后的每個日期相關聯的指標。(我正在使用的表格恰好是每月一次,但我確信我可以進行更改以使每日解決方案在這里作業)
所以,理想情況下,我們最終會得到一張如下所示的表格
| 日期 | 鑰匙 | 公制 |
|---|---|---|
| 2021-01-01 | 一種 | 6 |
| 2021-02-01 | 一種 | 3 |
| 2021-03-01 | 一種 | 0 |
| 2021-04-01 | 一種 | 0 |
| 2021-05-01 | 一種 | 3 |
| 2021-03-01 | 乙 | 4 |
| 2021-04-01 | 乙 | 1 |
| 2021-05-01 | 乙 | 2 |
我認為這可能更適合 SQL,但我想嘗試 R——我應該沿著某個回圈的路徑檢查每個鍵的第一個日期,檢查它是否有下一個日期的條目,以及添加如果沒有?感覺這會很快變得相當笨拙。
暫時就這么多,非常感謝大家
uj5u.com熱心網友回復:
我們可以complete在分組后使用:
library(lubridate) # formatting date
library(dplyr)
df %>%
mutate(Date = as.Date(ydm(Date))) %>% # you don't need this if your date is in correct format
group_by(Key) %>%
complete(Date = seq(min(Date), max(Date), by = "1 day"),
fill = list(Metric = 0))
Key Date Metric
<chr> <date> <dbl>
1 A 2021-01-01 6
2 A 2021-01-02 3
3 A 2021-01-03 0
4 A 2021-01-04 0
5 A 2021-01-05 3
6 B 2021-01-03 4
7 B 2021-01-04 1
8 B 2021-01-05 2
uj5u.com熱心網友回復:
我敢打賭有一種更短的方法,但這應該有效:
library(tidyverse)
df %>%
# get min and max date within Key
group_by(Key) %>%
mutate(minDate = min(Date), maxDate = max(Date)) %>%
ungroup() %>%
# make row for every Key / Date combo
complete(Key, Date, fill = list(Metric = 0)) %>%
# only keep the ones in that Key's range
filter(Date >= minDate, Date <= maxDate)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/328841.html
