我有兩個資料集。目的是在 df2 中出現新代碼并且 df2$LABEL 設定為 PRIV 時向 df1 添加一行。我只是嘗試使用 if 子句,但它對我不起作用。我想也許有一個 dplyr 庫的解決方案。我使用的邏輯(可能會有所幫助):
df1$CODE != df2$CODE & df2$LABEL == "PRIV"
帶有 dput 的資料集的虛擬示例(首先是 df1,然后是 df2):
structure(list(OUTLETID = c("11N", "12B", "17C",
"44O"), CODE = c(4623,
4623, 4111, 4343),
PRICE = c(1.45, 1.45, 5.45, 5.03), LABEL = c("PRIV", "PRIV", "NON PRIV", "NON PRIV")),
row.names = c(NA, -4L), class = c("tbl_df", "tbl", "data.frame"))
structure(list(CODE = c(4623, 4205, 4551),
PRICE = c(1.45, 1.17, 5.99), LABEL = c("PRIV", "PRIV", "NON PRIV")),
row.names = c(NA, -3L), class = c("tbl_df", "tbl", "data.frame"))
因此,在此示例中,應將 CODE=4205、PRICE=1.17 和 LABEL="PRIV" 的新行添加到 df1。在 df2 中沒有 OUTLETID,在該列中應該只是 NA。這段代碼應該適用于一般情況,更大的資料集,而不僅僅是這個小例子。
uj5u.com熱心網友回復:
由于您必須處理大型資料集,請在下面找到該data.table軟體包的解決方案:
library(data.table)
setDT(df1)
setDT(df2)
rbind(df1,df2[CODE %in% setdiff(df2$CODE, df1$CODE) & LABEL == "PRIV",], fill = TRUE)
#> OUTLETID CODE PRICE LABEL
#> 1: 11N 4623 1.45 PRIV
#> 2: 12B 4623 1.45 PRIV
#> 3: 17C 4111 5.45 NON PRIV
#> 4: 44O 4343 5.03 NON PRIV
#> 5: <NA> 4205 1.17 PRIV
我不清楚您是否想保留或洗掉df1. 因此,如果您想同時洗掉帶有“NON PRIV”標簽的行,df1可以使用以下代碼行:
rbind(df1[LABEL == "PRIV"],df2[CODE %in% setdiff(df2$CODE, df1$CODE) & LABEL == "PRIV",], fill = TRUE)
#> OUTLETID CODE PRICE LABEL
#> 1: 11N 4623 1.45 PRIV
#> 2: 12B 4623 1.45 PRIV
#> 3: <NA> 4205 1.17 PRIV
由reprex 包(v0.3.0)于 2021 年 10 月 26 日創建
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/341371.html
下一篇:嘗試將JSON決議為字典的問題
