【问题标题】:Determine maximum value in column related to specific order id确定与特定订单 ID 相关的列中的最大值
【发布时间】:2021-11-02 12:58:35
【问题描述】:

对于在线订单的数据,我必须确定单独订单的篮子大小。我拥有的信息在每个 order_id 的 product_number_within_order 上。例如,订单 id 123456 有 7 个变量,product_number_within_order 为 1 到 7(因此购物篮大小是 product_number_within_order 的最大值)。对于每个订单 ID,篮子大小应放在数据表中。我怎样才能最好地计算这个? order_id 不按顺序排列,这让我很难编程。现在我有以下内容,但是这需要很长时间才能运行,因此对我来说似乎不是最佳选择。

vec <- data.frame(table(unlist(data5$order_id)))

它给出了每个订单的购物篮大小(因为它计算了一个 order_id 被提及的次数)

    Var1 Freq
1      24409499    2
2      37018675    1
3      49812254    1
4      72349794    1
5     121649820    2
6     123680104    3
7     156423543   11

和下面的代码来确定篮子的大小

for (i in 1:length(data5$order_id)) {
  for (j in 1:length(vec$Var1))
  if (data5$order_id[i] != vec$Var1[j]) {
    size <- vec$Freq[j]
    data5$basketsize[i] <- size
  } 
}

对于某些 order_id,它可以工作,但对于其他人,它是完全错误的。有谁知道如何更有效地做到这一点或错误出在哪里?

【问题讨论】:

  • 如果您希望社区为您提供帮助,您应该提供数据框数据的最小可重现示例。使用dput(data5)output 分享你的df

标签: r max


【解决方案1】:

假设data5是一个包含变量order_id的数据框,你可以简单地:

library(dplyr)

data5 %>% 
  group_by(order_id) %>% 
  summarise(size=n())

例如,我在这里制作一个示例数据集并应用上述函数:

> data5 = tibble(order_id = sample(1:5, size=15, replace=T), other_var = 1:15)
> data5
# A tibble: 15 × 2
   order_id other_var
      <int>     <int>
 1        3         1
 2        2         2
 3        2         3
 4        4         4
 5        2         5
 6        1         6
 7        3         7
 8        3         8
 9        5         9
10        1        10
11        2        11
12        3        12
13        4        13
14        5        14
15        3        15
> data5 %>% 
  group_by(order_id) %>% 
  summarise(size=n())
# A tibble: 5 × 2
  order_id  size
     <int> <int>
1        1     2
2        2     4
3        3     5
4        4     2
5        5     2

【讨论】:

    猜你喜欢
    • 2017-08-05
    • 2021-10-27
    • 2013-01-23
    • 2016-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-14
    相关资源
    最近更新 更多