dplyr筛选器选择正确的行,但筛选器不';T
简单数据框:dplyr筛选器选择正确的行,但筛选器不';T,r,dataframe,dplyr,R,Dataframe,Dplyr,简单数据框: df=data.frame(rpm=c(3000,4000,5000)) dplyrfilter命令工作正常: > filter(df, rpm == 3000) rpm 1 3000 但是,我想使用过滤器版本,因为我被告知它在函数中更安全。如果不是因为这个,我只会坚持使用子集。下面是发生的情况: > filter_(df, "rpm" == 3000) [1] rpm <0 rows> (or 0-length row.names) >过滤器(
df=data.frame(rpm=c(3000,4000,5000))
dplyr
filter
命令工作正常:
> filter(df, rpm == 3000)
rpm
1 3000
但是,我想使用过滤器
版本,因为我被告知它在函数中更安全。如果不是因为这个,我只会坚持使用子集
。下面是发生的情况:
> filter_(df, "rpm" == 3000)
[1] rpm
<0 rows> (or 0-length row.names)
>过滤器(df,“rpm”==3000)
[1] 转速
(或长度为0的行名称)
绝对不行。发生了什么事?我们可以尝试使用
interp
library(layzeval)
df %>%
filter_(interp(~ nm==3000, nm=as.name("rpm")))
# rpm
#1 3000
阅读
filter(df,~rpm==3000”)
引用SE形式的参数通常最好使用~
,如filter(df,~rpm==3000)
Hmmm……这很复杂。@DeltaIV坚持使用dplyr
和magrittr
,tidyr
,只有当你试图在它们的基础上构建可适应的函数时,复杂性才真正存在。问题被保留为重复-因此我不能添加作为答案。这是我应该在函数中使用dplyr
的方式吗?这比简单的df[df$rpm==3000,]
要复杂得多,也不可读。如果这是dplyr
应该为我的程序带来的假定简化,那么我肯定会放弃它,转而支持baseR
。