分组后特定列重复 - 速度问题

时间:2018-01-26 07:21:58

标签: r dplyr

我有下面的工作代码,它完成了我的工作,并且对于+ - 1.000条记录的测试子集做得很好。但是,在实际数据集中,我有大约五十万行,突然代码占用超过五分钟。谁能告诉我为什么或如何改进代码?

我需要的最终结果是只保留重复ID的第一个值,但是每年应该更新一次(即如果它们在不同的年份,但是在同一年不是,则双重值是好的)。

Test %>%
  group_by(year, id) %>%
  mutate(is_duplicate = duplicated(id)) %>%
  mutate(oppervlakt = ifelse(is_duplicate == FALSE, oppervlakt, 0))%>%
  select(-is_duplicate)

1 个答案:

答案 0 :(得分:1)

我认为你可以从分组中移除id并获得相同的结果。见这个例子:

library(dplyr)
# some sample data:
n_rows <- 1E6
df <- data.frame(year = sample(x = c(2000:2018), size = n_rows, replace = TRUE),
                 id = sample(x = seq_len(1000), size = n_rows, replace = TRUE),
                 oppervlakt = rnorm(n = n_rows))

# Roughly 1 second:
system.time(df_slow <- df %>% group_by(year, id) %>% mutate(oppervlakt = ifelse(duplicated(id), 0, oppervlakt)))

# Roughly .1 second:
system.time(df_fast <- df %>% group_by(year) %>% mutate(oppervlakt = ifelse(duplicated(id), 0, oppervlakt)))

all.equal(df_slow, df_fast)
[1] TRUE