【发布时间】:2021-10-21 05:38:21
【问题描述】:
我正在为下面的代码苦苦挣扎。我的目标是仅当只有一个价格与其他价格不同时才使用模式重写价格。我知道使用 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) .
【问题讨论】:
-
请使用
dput(pp)分享您的数据reproductible example。 -
分享模拟数据,显示您需要做什么。我们不关心您的实际数据
-
如果您包含一个简单的reproducible example,其中包含可用于测试和验证可能解决方案的示例输入和所需输出,则更容易为您提供帮助。
-
@MonJeanJean 已更新