我正在努力處理下面的代碼。我的目標是僅當只有一個價格與其他價格不同時才使用 Mode 重寫價格。我知道使用 n()==1 我們可以選擇不重復的唯一價格,但是只有在有一個這樣的價格時才如何添加。嘗試使用 count(),但出現錯誤。
library("dplyr")
Mode <- function(x) {
ux <- unique(x)
ux[which.max(tabulate(match(x, ux)))]
}
pp <- pp %>%
group_by(PPCODE) %>%
mutate(PRICE = ifelse(count(n() == 1)==1, Mode(PRICE), PRICE), .keep="unused")
dput 的輸出:
structure(list(OUTLETID = c("11N", "12B", "17C",
"44Oo", "1NN", "5CC", "AA1", "11A"), PPCODE = c(4623,
4623, 4623, 4111, 4111, 4623, 4111, 4111),
PRICE = c(1.45, 1.45, 1.45, 5.11, 5.11, 1.42, 5.13, 4.5))),
row.names = c(NA, -4L), class = c("tbl_df", "tbl", "data.frame"))
因此,在第一個 ppcode 中,4623 價格應該更改,因為只有一個價格不同(1.42 應該更改為 1.45),但是對于第二個 ppcode,它們應該保持原樣(因為 2 個價格與模式不同,分別為 4.5 和 5.13)。
uj5u.com熱心網友回復:
您可以計算每個組中sum(PRICE != Mode(PRICE))與模式不同的值有多少,Mode如果它小于等于 1,則應用并應用該函式。
library(dplyr)
pp %>%
group_by(PPCODE) %>%
mutate(PRICE = if(sum(PRICE != Mode(PRICE)) <= 1) Mode(PRICE) else PRICE) %>%
ungroup
# OUTLETID PPCODE PRICE
# <chr> <dbl> <dbl>
#1 11N 4623 1.45
#2 12B 4623 1.45
#3 17C 4623 1.45
#4 44Oo 4111 5.11
#5 1NN 4111 5.11
#6 5CC 4623 1.45
#7 AA1 4111 5.13
#8 11A 4111 4.5
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/328839.html
上一篇:r根據另一列計算一列中的值
