我正在寻找一种有效的方法来删除小标题中的行,其中非缺失值与另一行中的缺失值相同。考虑这个假例子:
library(tidyverse)
phony_genes <- tribble(
~mouse_entrez, ~mgi_symbol, ~human_entrez, ~hgnc_symbol,
1, "a", 2 , "A",
1, "a", 2 , NA,
1, NA, 2 , "A",
1, "a", 3 , NA,
4, "b", 3 , NA,
5, NA, 2 , "A"
)
第 2 行是第 1 行的子集,因为第 2 行中的每个非缺失值与第 1 行中的相同。第 3 行也是如此,但缺少不同的值。我正在寻找一种使用 tidyverse (或其他包)过滤掉第 2 行和第 3 行,但保留其他行的方法。我无法过滤掉 hgnc_symbol
或 mgi_symbol
中的 NA
值,因为在这两种情况下我都会丢失想要保留的行。我无法按 mouse_entrez
进行分组并过滤掉组内的 NA
值,因为我想保留第 4 行。这个简单的示例当然可以扩展到一个巨大的 tibble 。我可能可以通过自己编码来做到这一点,但我想知道是否有人有一个优雅的解决方案。
最佳答案
library(dplyr)
phony_genes %>%
group_by(mouse_entrez, mgi_symbol, human_entrez) %>%
arrange_all(~ is.na(.)) %>%
slice(1)
# # A tibble: 4 x 4
# # Groups: mouse_entrez, mgi_symbol, human_entrez [4]
# mouse_entrez mgi_symbol human_entrez hgnc_symbol
# <dbl> <chr> <dbl> <chr>
# 1 1 a 2 A
# 2 1 a 3 <NA>
# 3 4 b 3 <NA>
# 4 5 c 2 A
关于r - 如何从 tibble 中删除非缺失值与其他行中的值子集匹配的行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60645461/