我有如下代码:
library(dplyr)
my_values <- rep(1:10, 10)
my_df <- data.frame(my_values, "points")
user_values <- c(2, 3)
filter(my_df, my_values %in% user_values)
用户提供某些值作为筛选依据。在某些情况下,过滤器不应处于“活动”状态,这意味着应保留所有值为“my_values”的行。
**我可以给user_values
分配什么来实现这一点?**我尝试赋值NULL,但返回0行。赋值TRUE会将其强制为值1。
我知道我可以分配my_df$my_values
(或unique(my_df$my_values)
),但是当变量有数千个可能的值时,通过这种方式进行过滤可能需要很长时间。所以我在寻找一个更优雅的解决方案。
3条答案
按热度按时间pbossiut1#
我会使用
TRUE
,因为它可以被理解为语义上的“一切”。NULL
也是@Konrad指出的一个选项,最终它会分解为项目中的品味/整体惯例问题:zz2j4svz2#
您可以在
filter
函数调用中使用if
:rhfm7lfc3#
一种可能性是测试
user_values
的length
。如果length是0
,则返回所有,否则使用filter
。或者,这也可以用在
filter
内部,如@thothal所示。或者将
if
条件放在filter
中,如@Konrad Rudolph所示。user_values
的以下设置将在这里给予my_df
的所有行。