gpt4 book ai didi

r - 在 R 中进行多重异或比较的优雅解决方案是什么?

转载 作者:行者123 更新时间:2023-12-05 03:28:55 26 4
gpt4 key购买 nike

我需要根据多个互斥条件过滤数据集。 xor 运算符似乎对这种情况很有用,但在 dplyr::filter 函数中使用感觉有点尴尬。其他逻辑运算符(|&== 等)允许我链接比较,但我还没有找到方法用 xor 来做到这一点。以下是我能想到的两种方法:

library(tidyverse)

#a)
Orange %>%
filter(xor(Tree == 1, xor(circumference == 75, age == 1582)))

#b)
Orange %>%
filter((Tree == 1 & !(circumference == 75) & !(age == 1582)) |
(Tree != 1 & circumference == 75 & !(age == 1582)) |
(Tree != 1 & !(circumference == 75) & age == 1582))

两者看起来都有点复杂。在我的数据集中,我需要测试五个条件,嵌套版本 a) 变得困惑。它也遵循与其他类型的比较截然不同的模式。方法 b) 过于臃肿,增加了拼写错误的风险。

我认为 %in% 运算符形式的东西可能有用,比如 %xor%,但它似乎不存在:

library(tidyverse)

Orange %>%
filter(Tree == 1 %xor% circumference == 75 %xor% age == 1582)

有什么方法比 a) 或 b) 更优雅且实际有效?

最佳答案

使用 bool 值到整数的显式转换来查看您正在执行的 3 项逻辑检查的矢量化总和为 1 的位置。

Orange %>%
filter((Tree == 1) + (circumference == 75) + (age == 1582) == 1)

关于r - 在 R 中进行多重异或比较的优雅解决方案是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71144003/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com