我想測驗一個值是否存在于我按因子分組的大型資料框中的兩個值之間。基本上,我有一列包含數值,我想測驗是否有任何行的值介于 -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()這里的功能不正確嗎?
非常感謝任何幫助。
uj5u.com熱心網友回復:
正如評論中所指出的,您只需要使用any一次并且不需要ifelse,因為 usingany已經回傳一個邏輯。
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)))
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/454433.html
