Как отфильтровать фрейм данных - PullRequest
26 голосов
/ 18 августа 2011

У меня есть фрейм данных, и я попытался выбрать только те наблюдения, которые меня интересуют:

data[data["Var1"]>10]

К сожалению, эта команда разрушает структуру data.frame и возвращает длинный vector.

То, что я хочу получить, это data.frame, сокращенное наблюдениями, которые не соответствуют моим критериям.

Ответы [ 2 ]

67 голосов
/ 18 августа 2011

В вашем утверждении отсутствует запятая.

Попробуйте это:

data[data[, "Var1"]>10, ]

Или:

data[data$Var1>10, ]

Или:

subset(data, Var1>10)

Например, попробуйте использовать встроенный набор данных, 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
5 голосов
/ 04 октября 2016

Другой метод, использующий пакет dplyr:

library(dplyr)
df <- mtcars %>%
        filter(mpg > 25)

Без оператора цепочки (%>%):

library(dplyr)
df <- filter(mtcars, mpg > 25)
...