我是 R 新手,需要幫助完成以下任務。下表是一個虛擬資料示例。我正在努力撰寫一個腳本來改變價格,如果只有一個價格不同(對于特定的 ppcode)并且只有一個符號不同,與其他價格相同。在此示例中,1.42 應更改為 1.45。但是,如果 1.42 不是 1.55,它也應該更改為 1.45。在此先感謝您的任何建議。

uj5u.com熱心網友回復:
這是一個基本的 R 方式ave。
with(df1, ave(PRICE, PPCODE, FUN = \(x) x[which.max(table(x))]))
#[1] 1.45 1.45 1.45 1.45
并將結果分配回PRICE.
df1$PRICE <- with(df1, ave(PRICE, PPCODE, FUN = \(x) x[which.max(table(x))]))
uj5u.com熱心網友回復:
如果我們需要這個Mode值,一個選項dplyr是
Mode <- function(x) {
ux <- unique(x)
ux[which.max(tabulate(match(x, ux)))]
}
library(dplyr)
df1 <- df1 %>%
group_by(PPCODE, grp = sprintf('%.1f', PRICE)) %>%
mutate(PRICE = Mode(PRICE)) %>%
ungroup %>%
select(-grp)
uj5u.com熱心網友回復:
這是一種dplyr方法:
library(dplyr)
df %>%
group_by(PRICE) %>%
mutate(helper = n()) %>%
ungroup() %>%
group_by(PPCODE) %>%
mutate(PRICE = ifelse(helper == unique(1), first(PRICE), PRICE), .keep="unused")
輸出:
OUTLETID CAT PPCODE PRICE
<chr> <chr> <int> <dbl>
1 8900NS2871 AIR 46239679 1.45
2 8900NX2201 AIR 46239679 1.45
3 8900NK2202 AIR 46239679 1.45
4 8900NV1594 AIR 46239679 1.45
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/325870.html
下一篇:將資料表轉換為R中的資料框
