我有一个当前看起来像这样的数据框:
ID Freq
A 10
B
A
G 6
B 11
C 6
C 7
D
E
我追求的数据帧是这样的:
ID Freq
A 10
G 6
B 11
C 6
C 7
D
E
我当前正在尝试编写一个循环,该循环标识ID
列中的重复项,然后删除带有空白Freq
值的重复行。如果存在重复的ID
,并且两个都在Freq
中有值,那么我不想删除它们。我从哪里开始呢?我会使用duplicated
函数来识别重复项吗?
编辑:编辑该操作以添加一些行,以表明如果ID不重复,我想保留空白的Freq值。
答案 0 :(得分:3)
仅当行多于1个时,您才可以group_by
ID
和filter
组。
library(dplyr)
df %>%
group_by(ID) %>%
filter(if(n() > 1) Freq != "" else TRUE)
# ID Freq
# <fct> <chr>
#1 A 10
#2 G 6
#3 B 11
#4 C 6
#5 C 7
#6 D ""
#7 E ""
在基数R中,我们可以使用ave
subset(df, ave(Freq != "", ID, FUN = function(x) if(length(x) > 1) x else TRUE))
对于更新后的请求,我们可以添加空白值检查以仅选择其中之一。
df %>%
group_by(ID) %>%
filter(if(n() > 1) Freq != "" | !duplicated(Freq == "") else TRUE)