如何有效地过滤数据框?

Mik*_*ike 26 r filter r-faq

我有一个数据框,并试图只选择我感兴趣的观察结果:

data[data["Var1"]>10]
Run Code Online (Sandbox Code Playgroud)

不幸的是,这个命令会破坏data.frame结构并返回一个长向量.

我想得到的是data.frame缩短了与我的标准不符的观察结果.

And*_*rie 68

您的陈述中缺少逗号.

试试这个:

data[data[, "Var1"]>10, ]
Run Code Online (Sandbox Code Playgroud)

要么:

data[data$Var1>10, ]
Run Code Online (Sandbox Code Playgroud)

要么:

subset(data, Var1>10)
Run Code Online (Sandbox Code Playgroud)

例如,在内置数据集上试一试, mtcars

data(mtcars)

mtcars[mtcars[, "mpg"]>25, ]

                mpg cyl  disp  hp drat    wt  qsec vs am gear carb
Fiat 128       32.4   4  78.7  66 4.08 2.200 19.47  1  1    4    1
Honda Civic    30.4   4  75.7  52 4.93 1.615 18.52  1  1    4    2
Toyota Corolla 33.9   4  71.1  65 4.22 1.835 19.90  1  1    4    1
Fiat X1-9      27.3   4  79.0  66 4.08 1.935 18.90  1  1    4    1
Porsche 914-2  26.0   4 120.3  91 4.43 2.140 16.70  0  1    5    2
Lotus Europa   30.4   4  95.1 113 3.77 1.513 16.90  1  1    5    2


mtcars[mtcars$mpg>25, ]

                mpg cyl  disp  hp drat    wt  qsec vs am gear carb
Fiat 128       32.4   4  78.7  66 4.08 2.200 19.47  1  1    4    1
Honda Civic    30.4   4  75.7  52 4.93 1.615 18.52  1  1    4    2
Toyota Corolla 33.9   4  71.1  65 4.22 1.835 19.90  1  1    4    1
Fiat X1-9      27.3   4  79.0  66 4.08 1.935 18.90  1  1    4    1
Porsche 914-2  26.0   4 120.3  91 4.43 2.140 16.70  0  1    5    2
Lotus Europa   30.4   4  95.1 113 3.77 1.513 16.90  1  1    5    2

subset(mtcars, mpg>25)

                mpg cyl  disp  hp drat    wt  qsec vs am gear carb
Fiat 128       32.4   4  78.7  66 4.08 2.200 19.47  1  1    4    1
Honda Civic    30.4   4  75.7  52 4.93 1.615 18.52  1  1    4    2
Toyota Corolla 33.9   4  71.1  65 4.22 1.835 19.90  1  1    4    1
Fiat X1-9      27.3   4  79.0  66 4.08 1.935 18.90  1  1    4    1
Porsche 914-2  26.0   4 120.3  91 4.43 2.140 16.70  0  1    5    2
Lotus Europa   30.4   4  95.1 113 3.77 1.513 16.90  1  1    5    2
Run Code Online (Sandbox Code Playgroud)

  • 肯定你可以通过放入,比如说"身份(身份(身份(数据))"来使这一点变得更长...... (8认同)
  • 或者:`data [data [["Var1"]]> 10,]`;-) (4认同)
  • 或者:`data [unclass(s​​ubset(data,select = c("Var1")))[[1]]> 10,]`! (3认同)

Mar*_*ner 5

使用dplyr包的另一种方法:

library(dplyr)
df <- mtcars %>%
        filter(mpg > 25)
Run Code Online (Sandbox Code Playgroud)

没有链(%>%)运算符:

library(dplyr)
df <- filter(mtcars, mpg > 25)
Run Code Online (Sandbox Code Playgroud)