首页 > 解决方案 > 如何在 R 中使用 dplyr 从数据框中删除观察列表?

问题描述

这是我的数据框 x

ID       Name      Initials     AGE 
123      Mike        NA          18
124      John        NA          20
125      Lily        NA          21
126      Jasper      NA          24
127      Toby        NA          27 
128      Will        NA          19 
129      Oscar       NA          32

我还有一个我想从数据框 x,num[1:3] 中删除的 ID 列表,如下所示:y

>print(y)
[1] 124 125 129

我的目标是从数据框 x 中删除 y 中的所有 ID

这是我想要的输出

ID       Name      Initials     AGE 
123      Mike        NA          18
126      Jasper      NA          24
127      Toby        NA          27 
128      Will        NA          19 

我正在使用 dplyr 包并尝试这个,但它不起作用,

FinalData <- x %>% 
             select(everything()) %>%
             filter(ID != c(y))

谁能告诉我需要纠正什么?

标签: rdplyrtidyverse

解决方案


当 'y' 的长度大于 1 时,我们可以使用%in%和否定。不需要该步骤,因为它选择了所有具有!selecteverything()

library(dplyr)
x %>%
    filter(!ID %in% y)
#   ID   Name Initials AGE
#1 123   Mike       NA  18
#2 126 Jasper       NA  24
#3 127   Toby       NA  27
#4 128   Will       NA  19

或者另一种选择是anti_join

x %>% 
    anti_join(tibble(ID = y))

base R,subset可以使用

subset(x, !ID %in% y)

数据

y <- c(124, 125, 129)
x <- structure(list(ID = 123:129, Name = c("Mike", "John", "Lily", 
"Jasper", "Toby", "Will", "Oscar"), Initials = c(NA, NA, NA, 
NA, NA, NA, NA), AGE = c(18L, 20L, 21L, 24L, 27L, 19L, 32L)),
 class = "data.frame", row.names = c(NA, 
-7L))

推荐阅读