gpt4 book ai didi

r - 根据另一个数据框中的多个条件过滤数据框

转载 作者:行者123 更新时间:2023-12-04 23:47:20 24 4
gpt4 key购买 nike

我有两个数据框:

  • df单人在哪里x有多个值 y
  • matchDf它定义了我想用来过滤的约束 df

  • 我只想过滤 y 的行低于或等于 max_y鉴于 x落在区间 <x_from, x_to)
    有没有办法在 R 中做到这一点(没有我在下面使用的 SQL)?
    df <- read.table(header = TRUE, text = '
    x y
    100 0.1
    100 0.2
    100 0.3
    250 0.2
    250 0.3
    250 0.4
    375 0.2
    375 0.25
    375 0.35
    420 0.15
    420 0.16
    420 0.17
    500 0.23
    500 0.55')

    matchDf <- read.table(header = TRUE, text = '
    x_from x_to max_y
    0 300 .2
    300 500 .3
    500 99999 .5
    ')

    library(sqldf)

    sqldf('select a.*
    from
    df a
    join matchDf b on (a.x >= b.x_from
    and a.x < b.x_to
    and a.y <= b.max_y)'
    )

    最佳答案

    尝试这个:

    df[df$y <= matchDf$max_y[cut(df$x, c(0,matchDf$x_to))],]
    x y
    1 100 0.10
    2 100 0.20
    4 250 0.20
    7 375 0.20
    8 375 0.25
    10 420 0.15
    11 420 0.16
    12 420 0.17
    13 500 0.23

    这里发生的是 cut正在为您提供 matchDf 中的哪一行 df中的每个观察应该在。然后,您只需将其用作位置行提取向量,并说明 y 的条件关系。使用 <= .

    看如何 cut有效,只需将其从表达式中拉出:
    > cut(df$x, c(0,matchDf$x_to))
    [1] (0,300] (0,300] (0,300] (0,300] (0,300] (0,300] (300,500] (300,500] (300,500] (300,500] (300,500] (300,500] (300,500] (300,500]
    Levels: (0,300] (300,500] (500,1e+05]

    级别标签无关紧要,因为 [使用底层整数值进行提取。

    关于r - 根据另一个数据框中的多个条件过滤数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29078044/

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