逻辑测试以确定值是否存在于 R 中的分组数据框中(整齐的解决方案)

Logical test to determine if a value exists in a grouped dataframe in R (tidy solution)

我想测试一个值是否存在于我按一个因素分组的大型数据框中的两个值之间。基本上,我有一列包含数值,我想测试是否有任何行的值介于 -5 和 5 之间。这是一个示例:

x <- tibble(value = c(-10, 8, 10, 0, 6, 10), group = c('A', 'A', 'A', 'B', 'B', 'B')) %>%
  group_by(group) %>%
  mutate(
    logical_test = if_else(any(value >= -5) & any(value <= 5), TRUE, FALSE)
  )

A 应该是 FALSE。它没有介于 -5 和 5 之间的值;但是,测试显示 TRUE。我不确定我做错了什么。 any() 不是正确的函数吗?

非常感谢任何帮助。

正如评论中指出的,您只需要使用 any 一次,不需要 ifelse,因为使用 any 已经 return 合乎逻辑。

library(dplyr)

x <-
  tibble(value = c(-10, 8, 10, 0, 6, 10),
         group = c('A', 'A', 'A', 'B', 'B', 'B')) 

x %>%
  group_by(group) %>%
  mutate(logical_test = any(value >= -5 & value <= 5))

输出

  value group logical_test
  <dbl> <chr> <lgl>       
1   -10 A     FALSE       
2     8 A     FALSE       
3    10 A     FALSE       
4     0 B     TRUE        
5     6 B     TRUE        
6    10 B     TRUE  

data.table:

library(data.table)

setDT(x)[, test := any(value >= -5 & value <= 5), by = group]

或以 R 为基数:

x$logical_test <- as.logical(ave(x$value, x$group, FUN = \(x) any(x >= -5 & x <= 5)))