R语言 我尝试筛选两种情况,但我一直删除具有其中任一种情况的所有患者

9rnv2umw  于 2023-02-10  发布在  其他
关注(0)|答案(2)|浏览(93)

我是一个R的初学者,所以为错误道歉,并感谢您的帮助。
我有一个数据集(肝脏),其中行是患者ID编号,列包括患者居住的区域(伦敦、约克郡等)以及患者在哪个单位接受治疗(医院名称)。有些病房是私人病房。我已经确认了120名来自伦敦的病人,其中100人在三个私人病房接受治疗。我想删除在私人病房接受治疗的100名伦敦患者,但我总是意外地删除在私人病房接受治疗的所有患者(大约900名病人)。我很感激你的建议,告诉我如何把伦敦的病人从私人诊所里移走。
我已经尝试了各种组合使用子集和过滤器与不同的感叹号和括号在不同的地方,包括例如:

liver <- filter(liver, region_name != "London" & unit_name!="Primrose Hospital" & unit_name != "Oak Hospital" & unit_name != "Wilson Hospital")

非常感谢。

zsohkypk

zsohkypk1#

您的unit_name条件正在将结果置零。请尝试使用match函数,该函数更常见的中缀形式为%in%

liver <- filter(liver,
                region_name != "London",
                ! unit_name %in% c("Primrose Hospital",
                                   "Oak Hospital",
                                   "Wilson Hospital"))

也可以使用逗号分隔逻辑AND条件。

qjp7pelc

qjp7pelc2#

在Pariksheet良好开端的基础上再接再厉(仍然丢弃伦敦以外的私立医院患者)。这里我们需要在filter函数中使用OR |运算符。我制作了一个示例 Dataframe ,演示如何在您的情况下使用该运算符。示例tibble包含您的三家私立伦敦医院和一家我们想要保留的非私立医院。另外,它有曼彻斯特的病人,他们同时在曼奇和一家私立医院就诊,我们都想留住他们。
编辑:现在包括字符向量,以允许泛化的组合排除。

liver <- tibble(region_name = rep(c('London', 'Liverpool', 'Glasgow', 'Manchester'), each = 4),
                unit_name = c(rep(c('Primrose Hospital',
                              'Oak Hospital',
                              'Wilson Hospital',
                              'State Hospital'), times = 3), 
                              rep(c('Manch General', 'Primrose Hospital'), each = 2)))

liver

# A tibble: 16 x 2
   region_name unit_name        
   <chr>       <chr>            
 1 London      Primrose Hospital
 2 London      Oak Hospital     
 3 London      Wilson Hospital  
 4 London      State Hospital   
 5 Liverpool   Primrose Hospital
 6 Liverpool   Oak Hospital     
 7 Liverpool   Wilson Hospital  
 8 Liverpool   State Hospital   
 9 Glasgow     Primrose Hospital
10 Glasgow     Oak Hospital     
11 Glasgow     Wilson Hospital  
12 Glasgow     State Hospital   
13 Manchester  Manch General    
14 Manchester  Manch General    
15 Manchester  Primrose Hospital
16 Manchester  Primrose Hospital

excl.private.regions <- c('London', 
                          'Liverpool', 
                          'Glasgow')
excl.private.hospitals <- c('Primrose Hospital',
                            'Oak Hospital',
                            'Wilson Hospital')

liver %>% 
  filter(! region_name %in% excl.private.regions |
           ! unit_name %in% excl.private.hospitals)

# A tibble: 7 x 2
  region_name unit_name        
  <chr>       <chr>            
1 London      State Hospital   
2 Liverpool   State Hospital   
3 Glasgow     State Hospital   
4 Manchester  Manch General    
5 Manchester  Manch General    
6 Manchester  Primrose Hospital
7 Manchester  Primrose Hospital

相关问题