我對 R 比較陌生,希望得到有關此主題的任何幫助。
我有兩個資料集。其中一個包含美國每個郵政編碼的串列(資料集 1)。另一個資料集包含產品、產品可用性、銷售地區的郵政編碼以及銷售年份(資料集 2)。
對于 2020 年的資料,即使玩具不在該郵政編碼中出售,也會顯示郵政編碼。但是對于 2021 年,如果該郵政編碼中沒有提供該玩具,則它根本不會出現在資料集中。資料集 2 的示例:
ZIP PRODUCT AVAILABILITY YEAR
10000 TOY YES 2020
10001 TOY NO 2020
10002 TOY YES 2020
10000 TOY YES 2021
10002 TOY YES 2021
基本上,在上表中,您可以看到郵政編碼 10001 在 2021 年沒有出現,因為那年玩具沒有售出。
有了我可用的兩個資料集,我想向 DATASET 2 添加行,這樣如果玩具在 2021 年沒有售出,它將添加如下一行:
ZIP PRODUCT AVAILABILITY YEAR
10001 TOY NO 2021
到目前為止,我正在考慮做一些類似的事情
IF YEAR(2021) AND (PRODUCT does not exist in given ZIP)
THEN [AVAILABILITY] = "NO"
但是,我對語法以及如何操作兩個資料集感到非常困惑,以便可以將 DATASET 2 與 DATASET 1 進行交叉檢查以獲取完整的郵政編碼串列。
同樣,非常感謝您提供的任何建議。謝謝!
uj5u.com熱心網友回復:
我強烈建議您在處理日期時查看 tsibble
library(tidyverse)
library(tsibble)
#>
#> Attaching package: 'tsibble'
#> The following objects are masked from 'package:base':
#>
#> intersect, setdiff, union
data_exemple_1 <- tibble::tribble(
~ZIP, ~PRODUCT, ~AVAILABILITY, ~YEAR,
10000L, "TOY", "YES", 2020L,
10001L, "TOY", "NO", 2020L,
10002L, "TOY", "YES", 2020L,
10000L, "TOY", "YES", 2021L,
10002L, "TOY", "YES", 2021L
)
data_exemple_1 |>
tsibble(index = YEAR,key = c(ZIP,PRODUCT)) |>
tsibble::fill_gaps(AVAILABILITY = 'NO',.full = TRUE)
#> # A tsibble: 6 x 4 [1Y]
#> # Key: ZIP, PRODUCT [3]
#> ZIP PRODUCT AVAILABILITY YEAR
#> <int> <chr> <chr> <dbl>
#> 1 10000 TOY YES 2020
#> 2 10000 TOY YES 2021
#> 3 10001 TOY NO 2020
#> 4 10001 TOY NO 2021
#> 5 10002 TOY YES 2020
#> 6 10002 TOY YES 2021
由reprex 包(v2.0.1)于 2021 年 10 月 18 日創建
uj5u.com熱心網友回復:
你可以使用tidyr::complete-
tidyr::complete(df, ZIP, PRODUCT, YEAR, fill = list(AVAILABILITY = 'NO'))
# ZIP PRODUCT YEAR AVAILABILITY
# <int> <chr> <int> <chr>
#1 10000 TOY 2020 YES
#2 10000 TOY 2021 YES
#3 10001 TOY 2020 NO
#4 10001 TOY 2021 NO
#5 10002 TOY 2020 YES
#6 10002 TOY 2021 YES
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/324592.html
標籤:r
