dplyr的过滤功能:如何返回每个值(或"取消"过滤器的效果)?

bro*_*ues 6 r data-manipulation dplyr

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

data(cars)
library(dplyr)
cars %>% filter(speed==`magic_value_that_returns_cars?`)
Run Code Online (Sandbox Code Playgroud)

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

Ric*_*ven 6

列总是等于它自己,所以

cars %>% filter(speed == speed)
Run Code Online (Sandbox Code Playgroud)

将返回完整的数据集.

更新:NA数据中存在值时,结果将不起作用.对不起,我错过了.所以,为了使这个答案正确,我会敦促你从评论中继续推荐@konvas.

cars %>% filter(TRUE)
Run Code Online (Sandbox Code Playgroud)

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


小智 5

如果您在闪亮的应用程序中应用此功能,下面是一个示例,说明如何在用户选择“全部”时按“无”进行过滤。组合使用大括号 和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
Run Code Online (Sandbox Code Playgroud)