R 中的双重否定

Double Negation in R

我在 R 中有一个数据框:

df =

yy     mm  data
2012    1  1000
2012    1  1500 
2013    2  1250
2013    1  1350

我想要的是在 yy = 2013 和 mm = 1 时排除列。我试过了

df[(df$yy != 2013) & (df$mm != 1),]

但是不行。

将您的代码更改为以下内容:

df[df$yy != 2013 | df$mm != 1,]

输出

#>      yy    mm  data
#>   <dbl> <dbl> <dbl>
#> 1  2012     1  1000
#> 2  2012     1  1500
#> 3  2013     2  1250

您也可以使用 dplyr 包中的 filter 来完成此操作。

library(tibble)
library(dplyr)

df <- tibble::tribble(
   ~yy, ~mm, ~data,
  2012,    1,  1000,
  2012,    1,  1500,
  2013,    2,  1250,
  2013,    1,  1350
  )

df %>% 
  filter(yy != 2013 | mm != 1)

#> # A tibble: 3 x 3
#>      yy    mm  data
#>   <dbl> <dbl> <dbl>
#> 1  2012     1  1000
#> 2  2012     1  1500
#> 3  2013     2  1250

reprex package (v0.3.0)

于 2021 年 3 月 17 日创建

这些都应该有效:

df[(df$yy != 2013) | (df$mm != 1),] # note the | not &
df[!((df$yy == 2013) & (df$mm == 1)),]

输出:

A data.frame: 3 × 3
    yy      mm      data
    <dbl>   <dbl>   <dbl>
1   2012    1       1000
2   2012    1       1500
3   2013    2       1250

这是使用 subset

的基础 R 选项
subset(
  df,
  !(yy == 2013 & mm == 1)
)

这给出了

    yy mm data
1 2012  1 1000
2 2012  1 1500
3 2013  2 1250

使用 collapse

中的 fsubset
library(collapse)
fsubset(df, yy != 2013 | mm != 1)
# A tibble: 3 x 3
#     yy    mm  data
#  <dbl> <dbl> <dbl>
#1  2012     1  1000
#2  2012     1  1500
#3  2013     2  1250