我有一個分配了區域/地鐵分類的郵政編碼資料框。在某些情況下,由于資料源的原因,相同的郵政編碼將出現在區域和都市分類中。
POSTCODE REGON
1 3000 METRO
2 3000 REGIONAL
3 3256 METRO
4 3145 METRO
我想知道在這些情況下如何洗掉重復行并用“SPLIT”替換該區域。
我嘗試使用以下代碼,但是這會使用“METRO”或“REGIONAL”重新分配整個資料集
test <- within(PC_ACTM, REGION <- ifelse(duplicated("Postcode"), "SPLIT", REGION))
所需的輸出將是
POSTCODE REGON
1 3000 SPLIT
2 3256 METRO
3 3145 METRO
示例資料:
dput(PC_ACTM)
structure(list(POSTCODE = c(3000L, 3000L, 3256L, 3145L), REGON = c("METRO",
"REGIONAL", "METRO", "METRO")), class = "data.frame", row.names = c("1",
"2", "3", "4"))
uj5u.com熱心網友回復:
根據您的頭銜,您正在尋找ifelse()解決方案;也許這會適合?
PC_ACTM <- structure(list(POSTCODE = c(3000L, 3000L, 3256L, 3145L),
REGION = c("METRO", "REGIONAL", "METRO", "METRO")),
class = "data.frame",
row.names = c("1", "2", "3", "4"))
PC_ACTM$REGION <- ifelse(duplicated(PC_ACTM$POSTCODE), "SPLIT", PC_ACTM$REGION)
PC_ACTM[!duplicated(PC_ACTM$POSTCODE, fromLast = TRUE),]
#> POSTCODE REGION
#> 2 3000 SPLIT
#> 3 3256 METRO
#> 4 3145 METRO
由reprex 包于 2022-04-07 創建(v2.0.1)
uj5u.com熱心網友回復:
考慮ave按組順序計數,然后subset最后但在使用之前ifslse替換任何組計數超過 1 的所需值。下面使用新的基礎 R 4.1.0 管道|>:
test <- within(
PC_ACTM, {
PC_SEQ <- ave(1:nrow(test), POSTCODE, FUN=seq_along)
PC_COUNT <- ave(1:nrow(test), POSTCODE, FUN=length)
REGION <- ifelse(
(PC_SEQ == PC_COUNT) & (PC_COUNT > 1), "SPLIT", REGION
)
}
) |> subset(
subset = PC_SEQ == PC_COUNT, # SUBSET ROWS
select = c(POSTCODE, REGION) # SELECT COLUMNS
) |> `row.names<-`(NULL) # RESET ROW NAMES
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/457691.html
上一篇:根據條件分配多個行值
