【问题标题】:dplyr filter selects correct rows, but filter_ doesn't [duplicate]dplyr 过滤器选择正确的行,但 filter_ 没有 [重复]
【发布时间】:2016-02-11 10:47:11
【问题描述】:

简单的数据框:

df=data.frame(rpm=c(3000,4000,5000))

dplyrfilter 命令工作正常:

> filter(df, rpm == 3000)
   rpm
1 3000

但是,我想使用filter_ 版本,因为有人告诉我它在功能上更安全。如果不是因为这个,我会坚持使用subset。以下是发生的事情:

> filter_(df, "rpm" == 3000)
[1] rpm
<0 rows> (or 0-length row.names)

肯定不行。发生了什么事?

【问题讨论】:

  • 阅读this
  • filter_(df, "rpm == 3000")
  • 在 SE 形式中引用参数通常最好使用 ~ 完成,如 filter_(df, ~rpm == 3000)
  • 嗯……很复杂。
  • @DeltaIV 值得坚持使用dplyrmagrittrtidyr 等。只有尝试在它们之上构建可适应的函数时,才会真正复杂化。问题因重复而被搁置 - 所以我无法添加为答案。

标签: r dataframe dplyr


【解决方案1】:

我们可以试试interp

library(layzeval)
df %>%
     filter_(interp(~ nm==3000, nm=as.name("rpm")))
#   rpm
#1 3000

【讨论】:

  • 这是我应该在函数内部使用dplyr 的方式吗?这比简单的df[df$rpm==3000,] 更加复杂和不可读。如果这是 dplyr 应该引入我的程序的假定简化,我肯定会放弃它以支持基本 R
猜你喜欢
  • 1970-01-01
  • 2021-04-21
  • 1970-01-01
  • 2020-05-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-15
  • 1970-01-01
相关资源
最近更新 更多