我最近开始使用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 键功能的顺序,或者还有其他问题。
答案 0 :(得分:1)
在这一行
df %>% select(Number) %>% filter(Letter == 'a')
第一次调用select
会给您留下一个只包含一列(Number
)的数据表。这正是filter
抱怨的原因 - 您抛弃了Letter
列。
在第二个电话中,您首先过滤Letter
,然后将列扔掉。
因此,filter
正在按预期工作。没有&#34;一般规则&#34;除此之外,&#34;以明智的顺序做事情&#34;或&#34;垃圾中的垃圾&#34;