根据 R 中两个变量的两个条件使用 dplyr 删除行

问题描述 投票:0回答:2

我有一个数据框

day<-c(155, 155, 155, 155, 155, 155, 155, 155, 155, 156, 156, 156, 156, 156, 156, 156, 156,
       156, 157, 157, 157, 157, 157, 157, 157, 157, 157)
id<-c(149, 188, 206, 224, 151, 166, 186, 210, 226, 149, 188, 206, 224, 151, 166, 186, 210, 226, 149, 188,
      206, 224, 151, 166, 186, 210, 226)
var<-c(7.85481, 13.90381, 19.47181, 16.85981,  9.41781,  9.11281, 16.62381, 20.00081, 18.57781,  7.41781, 13.71681,
       20.21881, 17.73281,  7.29281,8.48781, 18.49481, 20.74881 ,19.13781 ,10.60381 ,17.51981 , 2.67881 ,18.29481, 10.60381 ,
       1.79581, 22.11081,  2.82081, 21.81281)
df<-data_frame(day,id,var)

df
> df
# A tibble: 27 × 3
     day    id   var
   <dbl> <dbl> <dbl>
 1   155   149  7.85
 2   155   188 13.9 
 3   155   206 19.5 
 4   155   224 16.9 
 5   155   151  9.42
 6   155   166  9.11
 7   155   186 16.6 
 8   155   210 20.0 
 9   155   226 18.6 
10   156   149  7.42
# ℹ 17 more rows
# ℹ Use `print(n = ...)` to see more rows

我需要根据两个条件从中删除行:

我需要删除id 166的第157天,id 206的第157天和id 210的第157天。

我尝试了以下方法:

    df%>%
    filter(!id==166 & !day==157,
              !id==206 & !day==157,
              !id==210 & !day==157)
    # A tibble: 12 × 3
         day    id   var
       <dbl> <dbl> <dbl>
     1   155   149  7.85
     2   155   188 13.9 
     3   155   224 16.9 
     4   155   151  9.42
     5   155   186 16.6 
     6   155   226 18.6 
     7   156   149  7.42
     8   156   188 13.7 
     9   156   224 17.7 
    10   156   151  7.29
    11   156   186 18.5 
    12   156   226 19.1 

> 

但这会删除第 157 天的所有行

如何结合这两个条件?

提前致谢!

r dplyr filter
2个回答
0
投票
df %>%
  filter(!(id==166 & day==157),
         !(id==206 & day==157),
         !(id==210 & day==157)) 

0
投票
    library(tidyverse)
df<-tibble(day=c(155, 155, 155, 155, 155, 155, 155, 155, 155, 156, 156, 156, 156, 156, 156, 156, 156,
                      156, 157, 157, 157, 157, 157, 157, 157, 157, 157),
               id=c(149, 188, 206, 224, 151, 166, 186, 210, 226, 149, 188, 206, 224, 151, 166, 186, 210, 226, 149, 188,
                     206, 224, 151, 166, 186, 210, 226),
               var=c(7.85481, 13.90381, 19.47181, 16.85981,  9.41781,  9.11281, 16.62381, 20.00081, 18.57781,  7.41781, 13.71681,
                      20.21881, 17.73281,  7.29281,8.48781, 18.49481, 20.74881 ,19.13781 ,10.60381 ,17.51981 , 2.67881 ,18.29481, 10.60381 ,
                      1.79581, 22.11081,  2.82081, 21.81281))
df%>%
  filter(id!=166 | day!=157,
         id!=206 | day!=157,
         id!=210 | day!=157)
© www.soinside.com 2019 - 2024. All rights reserved.