过滤器在dplyr中无法正常工作(找不到对象)

时间:2017-09-18 22:42:53

标签: r dplyr

我最近开始使用dplyr库,遇到了一个非常奇怪的问题,我在下面的例子中进行了解释:

数据:

<xsl:function name="fn:role-rank" as="xs:integer"> <xsl:param name="role" as="xs:string"/> <xsl:variable name="known-titles" as="xs:string*" select="('Faculty', 'Adjunct Faculty', 'Staff')"/> <xsl:sequence select="index-of(($known-titles, $role), $role)[1]"/> </xsl:function>

df <- data.frame(Number = c(1,2), Letter = c('a','b'))

问题:

运行像这样的选择和过滤器:

df = tbl_df(tst)

给我错误:

df %>% select(Number) %>% filter(Letter == 'a')

虽然我可以更改选择和过滤的顺序,但它可以正常工作:

"Error in filter_impl(.data, quo) :    
Evaluation error: object 'Letter' not found."

结果:

df  %>% filter(Letter == 'a') %>% select(Number)

我找不到任何地方可以解释这是否是一般规则,并且有使用 dplyr 键功能的顺序,或者还有其他问题。

1 个答案:

答案 0 :(得分:1)

在这一行

df %>% select(Number) %>% filter(Letter == 'a')

第一次调用select会给您留下一个只包含一列(Number)的数据表。这正是filter抱怨的原因 - 您抛弃了Letter列。

在第二个电话中,您首先过滤Letter然后将列扔掉。

因此,filter正在按预期工作。没有&#34;一般规则&#34;除此之外,&#34;以明智的顺序做事情&#34;或&#34;垃圾中的垃圾&#34;