gpt4 book ai didi

r - 如何根据请求 id 和先前的请求 id 订购 R 数据帧?

转载 作者:行者123 更新时间:2023-12-04 15:42:58 25 4
gpt4 key购买 nike

我有一个 R 数据框,它看起来像:

用户 |request_id |previous_request_id
-------------------------------------
一个 |9 |5
一个 |3 |1
A |5 |不适用
一个 |1 |9
乙 |2 |8
乙 |8 |7
B |7 |不适用
乙 |4 |2

每行对应一个特定用户提出的请求。每行都有一个用户 ID、一个请求 ID 和他们之前请求的 ID。在没有先前请求的情况下,previous_request_id 字段为 NA。

对于每个用户,我想使用以前的请求 id 对每个请求进行排序,使用:

  • 如果 previous_request_id 为 NA
  • ,则顺序为 1
  • 如果 previous_request_id 等于 request_id 的顺序为 1,则顺序为 2
  • 如果 previous_request_id 等于 request_id 的顺序为 2,则顺序为 3

  • 应用于第一个表的上述规则的结果应如下所示:

    用户 |request_id |previous_request_id |订单
    ---------------------------------------------
    A |9 |5 |2
    一个 |3 |1 |4
    A |5 |不适用 |1
    A |1 |9 |3
    乙 |2 |8 |3
    乙 |8 |7 |2
    乙 |7 |不适用 |1
    乙 |4 |2 |4

    有没有办法在 R 中做到这一点?我相信图形数据库包可能是做到这一点的方法,但到目前为止我还没有在我的研究中找到任何东西(以 Neo4j 的 Cypher 语言为中心)。

    这里的任何帮助将不胜感激!

    最佳答案

    有很多方法可以做到这一点,但这是我想出的……

    df <- read.delim(text="User|request_id|previous_request_id
    A|9|5
    A|3|1
    A|5|NA
    A|1|9
    B|2|8
    B|8|7
    B|7|NA
    B|4|2", sep="|")

    df$order <- rep(NA, nrow(df))
    df$order[is.na(df$previous_request_id)] <- 1
    df$order[df$order[match(df$previous_request_id, df$request_id)] == 1] <- 2
    df$order[df$order[match(df$previous_request_id, df$request_id)] == 2] <- 3
    df$order[df$order[match(df$previous_request_id, df$request_id)] == 3] <- 4

    但请注意,我们(几乎)一遍又一遍地重复相同的代码。我们可以创建一个循环来稍微缩短代码......
    max_user_len <- max(table(df$User))
    df$order <- rep(NA, nrow(df))
    df$order[is.na(df$previous_request_id)] <- 1
    sapply(1:max_user_len, function(x)df$order[df$order[match(df$previous_request_id, df$request_id)] == x] <<- x+1)
    > df$order
    [1] 2 4 1 3 3 2 1 4

    关于r - 如何根据请求 id 和先前的请求 id 订购 R 数据帧?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30617948/

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