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
我在 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
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