我有下面的工作代码,它完成了我的工作,并且对于+ - 1.000条记录的测试子集做得很好。但是,在实际数据集中,我有大约五十万行,突然代码占用超过五分钟。谁能告诉我为什么或如何改进代码?
我需要的最终结果是只保留重复ID的第一个值,但是每年应该更新一次(即如果它们在不同的年份,但是在同一年不是,则双重值是好的)。
Test %>%
group_by(year, id) %>%
mutate(is_duplicate = duplicated(id)) %>%
mutate(oppervlakt = ifelse(is_duplicate == FALSE, oppervlakt, 0))%>%
select(-is_duplicate)
答案 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