我有一个数据帧,每行一个观察,每个主题两个观察。我想过滤掉重复日期的行' day'数字。
ex <- data.frame('id'= rep(1:5,2), 'day'= c(1:5, 1:3,5:6))
以下代码仅过滤掉第二个重复行,但不过滤掉第一个行。同样,我想过滤掉两个重复的行。
ex %>%
group_by(id) %>%
filter(duplicated(day))
以下代码有效,但看起来很笨拙。有没有人有更有效的解决方案?
ex %>%
group_by(id) %>%
filter(duplicated(day, fromLast = TRUE) | duplicated(day, fromLast = FALSE))
答案 0 :(得分:4)
duplicated
可以应用于整个数据集,只需使用base R
方法就可以完成。
ex[duplicated(ex)|duplicated(ex, fromLast = TRUE),]
使用dplyr
,只有当行数(group_by
)大于1时,我们才能filter
列和n()
。
ex %>%
group_by(id, day) %>%
filter(n()>1)
答案 1 :(得分:1)
单个tidyverse管道:
exSinglesOnly <-
ex %>%
group_by(id,day) %>% # the complete group of interest
mutate(duplicate = n()) %>% # count number in each group
filter(duplicate == 1) %>% # select only unique records
select(-duplicate) # remove group count column
> exSinglesOnly Source: local data frame [4 x 2] Groups: id, day [4] id day <int> <int> 1 4 4 2 5 5 3 4 5 4 5 6