这可能看起来像一个奇怪的问题,但有没有办法将值传递给filter()基本上什么也没做?
data(cars)
library(dplyr)
cars %>% filter(speed==`magic_value_that_returns_cars?`)
然后你会得到整个数据框cars
。我认为这在闪亮的应用程序中很有用,用户只需要选择他想要过滤的值;例如,用户可以选择“欧洲”,“非洲”或“美国”,并在幕后对数据框进行过滤,然后返回具有“欧洲”描述性统计数据的表格(如果用户选择“欧洲”) 。但是如果用户想要在没有首先过滤的情况下拥有描述性统计数据呢?我们可以传递一个值来过滤到“取消”过滤器并将整个数据帧传递给总结()吗?
答案 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