删除dplyr中的重复行时删除列

时间:2018-10-02 09:40:25

标签: r dplyr

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具有相同的ya,则只需删除它们。我是这样做的:

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) 列?

1 个答案:

答案 0 :(得分:1)

如注释中所述,您可以在.keep_all = TRUE中指定distinct

您正在根据几种条件选择行,可以用arrangeslice在更少的代码行中组合:

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年保留。您可能希望指定要保留重复值的年份(最大值或最小值)。