【问题标题】:How to filter a data frame如何过滤数据框
【发布时间】:2011-10-29 16:44:51
【问题描述】:

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

data[data["Var1"]>10]

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

我想要得到的是 data.frame 被不符合我标准的观察所缩短。

【问题讨论】:

标签: r filter r-faq


【解决方案1】:

您的语句中缺少逗号。

试试这个:

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

【讨论】:

  • 或者:data[data[["Var1"]]>10,] ;-)
  • @mbq 确实如此。我已经编辑了我的答案以包含其他一些选项。
  • 或:data[ unclass(subset(data,select=c("Var1")))[[1]]>10 , ]!
  • 当然,您可以通过输入 identity(identity(identity(data))) ... 来延长这段时间。
  • 为了完整起见,也可以试试data[data["Var1"] > 10, , drop = FALSE]。当结果只有一行/列并且 R 尝试简化它时,drop 有效。
【解决方案2】:

使用 dplyr 包的另一种方法:

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

不带链(%>%)运算符:

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

【讨论】:

    猜你喜欢
    • 2018-10-02
    • 1970-01-01
    • 2011-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多