我翻阅了重复的答案,但找不到与此类似的情况。我只想删除一组重复项,并保持原样。无需创建临时表就能实现吗?
例:
我只想删除ID ==“ B”的重复项,我不在乎其他ID是否存在重复项。
library(dplyr)
dt <- tibble(ID = rep(LETTERS[1:3], 3),
VAL = rep(1:3, 3),
VAL2 = rep(1:3, 3)) %>%
arrange(ID)
我通常用来在两列中查找重复项的内容。
dt %>%
group_by(ID) %>%
distinct(VAL, VAL2, .keep_all = T)
当然,这将找到所有重复项,我可以使用过滤器并创建一个新表,然后从那里开始工作,但是寻找删除ID ==“ B”重复项而不触摸其他ID的方法。是否可以在不创建临时表的情况下实现?
我目前的工作流程
B <- dt %>%
filter(ID == "B") %>%
distinct(VAL, VAL2, .keep_all = T)
dt %>%
filter(ID != "B") %>%
bind_rows(B)
# A tibble: 7 x 3
ID VAL VAL2
<chr> <int> <int>
1 A 1 1
2 A 1 1
3 A 1 1
4 C 3 3
5 C 3 3
6 C 3 3
7 B 2 2
当然,可以像您已经做的那样完成它:
dt %>%
filter(ID == "B") %>%
distinct(VAL, VAL2, .keep_all = T) %>%
bind_rows(dt %>% filter(ID != "B"))
也可以使用data.table
以下方法实现:
library(data.table)
setDT(dt)
dt[ID != "B" | !duplicated(dt, by=c("ID", "VAL", "VAL2"))]
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句