r 在重复的情况下保留非零行

问题描述 投票:0回答:1

如果我们按两列分组,我有一个包含重复行的数据集

 ID    Group       Value    
   1     z1       0 
   1     z1       0.81 
   2     z2       2.89 
   2     z2       1.53
   3     z1       -0.23
   3     z1       0
   4     z3       10.75
   4     z3       8.13
   5     x2       0.45
   5     x2       1.43

如果按

ID
Group
列分组时存在重复行,我会尝试仅保留非零行

预期产量

 ID    Group       Value    
 
   1     z1       0.81 

   2     z2       2.89 
   2     z2       1.53

   3     z1       -0.23

   4     z3       10.75
   4     z3       8.13

   5     x2       0.45
   5     x2       1.43

ID 1 和 3 中包含 0 的行被排除。这是我迄今为止尝试过的

df %>%
group_by(ID, GroupID) %>%
filter(if (any(duplicated(.) Value != 0 else TRUE) %>%
ungroup()

我的原始数据集中有 22000 行,上面的代码花了很长时间并且没有收敛。 然后我尝试了这个。

df %>%
group_by(ID, GroupID) %>%
slice(if (any(duplicated(.))) which(Value != 0) else 1:n()) %>%
ungroup()

这仍然没有解决问题,没有给我预期的结果,代码花了很长时间,而且似乎什么也没有发生。

非常感谢任何有关如何调整此代码的建议。谢谢。

r dplyr duplicates aggregate data-transform
1个回答
0
投票
df |> dplyr::filter(!(Value == 0 & n() > 1), .by = c(ID, Group))
© www.soinside.com 2019 - 2024. All rights reserved.