当至少一行中存在值时,删除行组

问题描述

我正在尝试使用dplyr过滤数据。如果某些行包含一个值,那么我想消除整个行,那么应该删除整个行。

示例数据如下所示:例如,变量“名称”包含一组CE 10:0。该组的“ SampleType”是“ step”或“ Blank”。如果在CE 10:0组的“ SampleType”中存在“空白”值,则应删除整个CE 10:0-组。

因此,在此示例中,将仅保留CE 10:3和CE 11:1组。

我无法理解这个过滤功能,将不胜感激。

fullname    name    intensity   SampleType  
step6-a-s   CE 10:0 11997.1 step  
step7-c-s   CE 10:0 8752    step  
step4-c-s   CE 10:0 6969.9  step  
Blank2-s    CE 10:0 2231.1  Blank  
step6-b-s   CE 10:0 3275.6  step  
step7-b-s   CE 10:0 4485.4  step  
step3-c-s   CE 10:0 4191.6  step  
Blank1-s    CE 10:0 4349    Blank  
step8-a-s   CE 10:0 8838    step  
step7-b-s   CE 10:1 6155.3  step  
step4-c-s   CE 10:1 5899.9  step  
Blank2-s    CE 10:1 3098.6  Blank  
step6-b-s   CE 10:1 2945.2  step  
step5-c-s   CE 10:1 1207.2  step  
Blank1-s    CE 10:1 4173    Blank  
step2-b-s   CE 10:1 3219.4  step  
step4-a-s   CE 10:3 3658.2  step  
step1-b-s   CE 10:3 4070    step  
step5-a-s   CE 10:3 2776.4  step  
step3-a-s   CE 10:3 4821.6  step  
step4-b-s   CE 10:3 4145.9  step  
step5-c-s   CE 11:0 7056    step  
step3-c-s   CE 11:0 6367.5  step  
step2-b-s   CE 11:0 6426.9  step  
step7-c-s   CE 11:0 5133.9  step  
Blank2-s    CE 11:0 4006.3  Blank  
step1-c-s   CE 11:0 3791.7  step  
step4-b-s   CE 11:1 5183.7  step  
step4-a-s   CE 11:1 3549.5  step  
step3-b-s   CE 11:1 2822.9  step  
step1-b-s   CE 11:1 2495.7  step 

解决方法

好吧,我找到了一个更简单的解决方案:首先使用“空白”使包含来自行名称的向量,然后在第二步中使用该向量消除具有对应名称的组。也许不是最优雅的方法,但是它可行

blanks_in_n_and_s_split <- n_and_s_split %>%
  filter(SampleType == "Blank")
species_in_blank <-  unique(blanks_in_n_and_s_split$name)
n_and_s_split_blankfiltered <- n_and_s_split %>% 
  filter(!name %in% species_in_blank)