gpt4 book ai didi

r - 根据动态依赖的两个条件过滤

转载 作者:行者123 更新时间:2023-12-05 09:27:24 26 4
gpt4 key购买 nike

我有一个大型数据集,其值称为 CPE 和一个百分比 PERC。在现实世界中它略有不同,但我将其减少到最低限度。

| CPE|      PERC|
|---:|---------:|
| 42| 0.1132664|
| 264| 0.9260718|
| 470| 0.3732287|
| 316| 0.7437126|
| 9| 0.5819554|
| 114| 0.2052649|

现在我要过滤。较少的 CPE 需要较高的 PERC 才能获得关注。

我当然可以这样做:

df[(CPE > 20 & PERC > 0.95) |
(CPE > 50 & PERC > 0.9) |
(CPE > 100 & PERC > 0.85) |
(CPE > 250 & PERC > 0.8)]

但由于在现实世界中可能会有更多,而且它们会不时发生变化,所以我正在寻找一种更简单、更动态的解决方案。
比如创建一个包含所有组合的列表,然后将每个组合用作过滤条件对。

list(c(20, 0.95), c(50, 0.9), c(100,0.85), c(250,0.8))

有没有聪明的方法来处理这个问题?即使我更喜欢 data.tabledplyr 也很棒。它不是一个列表,我对任何类似的方法持开放态度。


MWE

library(data.table)

set.seed(33)

df = data.table(CPE=sample(1:500, 100),
PERC=runif(min = 0.1, max = 1, n=100))

最佳答案

如果 list 已经创建,我们可以遍历 list,使用 CPE 创建第一个和第二个元素的逻辑条件和 PERC 列,使用 | Reduce 到单个逻辑向量并对数据进行子集化

df[Reduce(`|`, lapply(lst1, \(x) CPE > x[1] & PERC > x[2]))]

数据

lst1 <- list(c(20, 0.95), c(50, 0.9), c(100,0.85), c(250,0.8))

关于r - 根据动态依赖的两个条件过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72492456/

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