None
如果dat <- data.frame(year = c(1980, 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988),
a = c(100, 200, 300, 400, 500, 350, 350, 350, 430),
p = c(60, 90, 80, 75, 95, 600, 600, 600, 330),
y = c(1, 1, 12, 11, 12, 13, 13, 13, 20))
被复制,则仅保留y
最高的y
。
如果重复的a
具有相同的y
,则将a
保留为最高的y
。
如果重复的p
具有相同的y
和a
,则只需删除它们。我是这样做的:
p
但是如何在这里保留我的dat %>% dplyr::arrange(y, a, p) %>% dplyr::group_by(y) %>%
dplyr::filter(a == max(a)) %>% dplyr::filter(p == max(p)) %>%
distinct(a, p, y)
列?
答案 0 :(得分:1)
如注释中所述,您可以在.keep_all = TRUE
中指定distinct
。
您正在根据几种条件选择行,可以用arrange
和slice
在更少的代码行中组合:
library(dplyr)
dat %>%
group_by(y) %>%
arrange(a, p) %>%
slice(n())
或者:
dat %>%
group_by(y) %>%
arrange(desc(a), desc(p)) %>%
slice(1)
如果您想选择给定权重的最大值,则可以使用top_n
:
dat %>%
group_by(y) %>%
top_n(1, a) %>%
top_n(1, p) %>%
distinct(y, a, p, .keep_all = TRUE)
后两种方法将使y = 13保留1985年,而第一种方法将使1987年保留。您可能希望指定要保留重复值的年份(最大值或最小值)。