r - 如何从 tibble 中删除非缺失值与其他行中的值子集匹配的行?

标签 r dplyr tidyverse tidyr missing-data

我正在寻找一种有效的方法来删除小标题中的行,其中非缺失值与另一行中的缺失值相同。考虑这个假例子:

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_symbolmgi_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/

相关文章:

r - 如果满足条件,tidyverse 将滞后行值 + 特定字符组合在一起

r - 如何将R公式转换为文本?

mysql - 在向后查找和向前查找特定日期列中的日期中查找最近的日期

r - 在数据框的行中,找到第一次出现和最长的值序列

r - dplyr 编译问题,Rcpp.h : no such file or directory

r - dplyr `across()` 分组时的函数和数据帧长度

r - 最后一个下划线后分隔字符串

r - 如何处理线性混合模型(lme4)中的奇异拟合?

r - 连接向量,append() 与 c()

r - 在 rscript 中加载 Rdata 文件