如何解决有条件地过滤重复的行
解决这类问题的最佳方法是什么?我想过滤掉其中包含group
的{{1}}的重复行(保留行中同时包含NA
和var1
的值),但是保持当var2
中没有重复值时的行。 group
展示了原始示例,其中dat
展示了我希望拥有的东西。
expected_output
有什么建议或想法吗?
解决方法
解决方案1-如果每个组的重复行位于不同的位置(例如,第一,最后或中间的某处)
dat %>%
arrange(group,var1,var2) %>%
group_by(group) %>%
slice_head() %>%
ungroup()
输出:
# A tibble: 5 x 3
group var1 var2
<chr> <chr> <chr>
1 A foo bar
2 B foo NA
3 C foo bar
4 D NA bar
5 E foo bar
解决方案2-如果重复的行始终是该组的最后一行
您可以将duplicated
与fromLast
选项一起使用,以保留最后匹配的行,找到匹配的索引,对其进行取反,并使用它来删除重复项,如下所示:
dat[!duplicated(dat$group,fromLast = TRUE),]
给出您请求的输出:
# A tibble: 4 x 3
group var1 var2
<chr> <chr> <chr>
1 A foo bar
2 B foo NA
3 C foo bar
4 D NA bar
,
一个选项可能是:
dat %>%
group_by(group) %>%
slice_max(rowSums(!is.na(across(c(var1,var2)))),1)
group var1 var2
<chr> <chr> <chr>
1 A foo bar
2 B foo <NA>
3 C foo bar
4 D <NA> bar
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。