找到相反的条件(使用 R tidyverse)以便将数据集拆分为 2

Finding the opposite of condition (using R tidyverse) in order to split dataset in 2

我正在尝试将我的数据集(296 行)一分为二,第一部分将有一些条件,另一部分只是不符合条件的其余数据集。

我这样做了,发现第一部分有 81 行:

cardio = donnees %>%
  select(`Nausées/vomissements`,Vertige,Nystagmus,`Ataxie:Démarche ébrieuse`,`Motif si pas HINTS`,
         Alcool,Tabac,`atcd neuro`,Dyslipidémies,Diabète) %>%
  filter(Alcool == "Yes" |
         Tabac == "Yes"|
         `atcd neuro` == "3" |
         Dyslipidémies == "Yes"|
         Diabète == "Yes") 

那我直接用“!”找到其余的,但不幸的是我只有 77 行而不是预期的 215 行,

donnees %>%
  select(`Nausées/vomissements`,Vertige,Nystagmus,`Ataxie:Démarche ébrieuse`,`Motif si pas HINTS`,
         Alcool,Tabac,`atcd neuro`,Dyslipidémies,Diabète) %>%
  filter(!(Alcool == "Yes" |
           Tabac == "Yes" |
           `atcd neuro` == "3" |
           Dyslipidémies == "Yes" |
           Diabète == "Yes" ))

如果有人可以帮忙?非常感谢

不使用括号,您可以将 ==| 符号替换为 !=&:

donnees %>%
  select(`Nausées/vomissements`,Vertige,Nystagmus,`Ataxie:Démarche ébrieuse`,`Motif si pas HINTS`,
         Alcool,Tabac,`atcd neuro`,Dyslipidémies,Diabète) %>%
  filter(Alcool != "Yes" &
           Tabac != "Yes" &
           `atcd neuro` != "3" &
           Dyslipidémies != "Yes" &
           Diabète != "Yes" )

编辑:您可以使用 anti-join 函数:

cardio = donnees %>%
  select(`Nausées/vomissements`,Vertige,Nystagmus,`Ataxie:Démarche ébrieuse`,`Motif si pas HINTS`,
         Alcool,Tabac,`atcd neuro`,Dyslipidémies,Diabète) %>%
  filter(Alcool == "Yes" |
         Tabac == "Yes"|
         `atcd neuro` == "3" |
         Dyslipidémies == "Yes"|
         Diabète == "Yes")

others <- dplyr::anti_join(donnees, cardio)

@MonJeanJean 建议的 anti_join 方法应该有效。但如果它没有,这里有一个有点不同的方法,想法是创建一个索引列并排除你不需要的(让人想起 mysql 天)。

donnees$index = 1:nrow(donnees)

cardio = donnees %>%
  select(`Nausées/vomissements`,Vertige,Nystagmus,`Ataxie:Démarche ébrieuse`,`Motif si pas HINTS`,
         Alcool,Tabac,`atcd neuro`,Dyslipidémies,Diabète, index) %>%
  filter(Alcool == "Yes" |
         Tabac == "Yes"|
         `atcd neuro` == "3" |
         Dyslipidémies == "Yes"|
         Diabète == "Yes")

cardio_required = cardio[-index, ]

这将为您提供 215 行