dplyr的过滤函数:如何返回每个值(或“取消”过滤器的效果)?

时间:2016-07-18 20:55:00

标签: r dplyr data-manipulation

这可能看起来像一个奇怪的问题,但有没有办法将值传递给filter()基本上什么也没做?

data(cars)
library(dplyr)
cars %>% filter(speed==`magic_value_that_returns_cars?`)

然后你会得到整个数据框cars。我认为这在闪亮的应用程序中很有用,用户只需要选择他想要过滤的值;例如,用户可以选择“欧洲”,“非洲”或“美国”,并在幕后对数据框进行过滤,然后返回具有“欧洲”描述性统计数据的表格(如果用户选择“欧洲”) 。但是如果用户想要在没有首先过滤的情况下拥有描述性统计数据呢?我们可以传递一个值来过滤到“取消”过滤器并将整个数据帧传递给总结()吗?

2 个答案:

答案 0 :(得分:5)

列总是等于它自己,所以

cars %>% filter(speed == speed)

将返回完整的数据集。

更新:当数据中有NA个值时,这将无效。对不起,我错过了。所以,为了使这个答案正确,我会敦促你从评论中继续推荐@konvas。

cars %>% filter(TRUE)

当然还有其他方法,但我认为这是最好的。

答案 1 :(得分:3)

如果你在一个闪亮的应用程序中应用它,这里有一个如何过滤“无”的例子,例如,如果用户选择“全部”。结合使用大括号和if else将有效地允许您跳过将filter应用于数据集的行:

x <- "All"

cars %>%
  {if(x!="All") filter(.,speed==x) else .} %>%
  head()

# speed dist
# 1     4    2
# 2     4   10
# 3     7    4
# 4     7   22
# 5     8   16
# 6     9   10

# No data is filtered

x <- 7

cars %>%
{if(x!="All") filter(.,speed==x) else .} %>%
  head()

# speed dist
# 1     7    4
# 2     7   22

# The data is filtered by x==7