r - 如何计算数据框每一行的相同值的条目?

标签 r loops dataframe count automation

假设我有一个大型数据框,其中包含订单日期、用户 ID 和商品 ID。

   order_id order_date user_id item_id
1         1 2016-06-22   30822     643
2         2 2016-06-22   30822     337
3         3 2016-06-22   30823     270
4         4 2016-06-22   30823     142
5         5 2016-06-22   30823     561
6         6 2016-06-22   30823     561
7         7 2016-06-22   30823      72
8         8 2016-06-22   30823     106
9         9 2016-06-22   30823     195
10       10 2016-06-22   30823     195

我想做的是计算同一用户在同一天下了多少订单,以及同一用户对同一商品下了多少订单,并在第四列和第五列中显示这两个值。所以结果应该是这样的:

   order_id order_date user_id item_id same_day same_item
1         1 2016-06-22   30822     643        2         1
2         2 2016-06-22   30822     337        2         1
3         3 2016-06-22   30823     270        8         1
4         4 2016-06-22   30823     142        8         1
5         5 2016-06-22   30823     561        8         2
6         6 2016-06-22   30823     561        8         2
7         7 2016-06-22   30823      72        8         1
8         8 2016-06-22   30823     106        8         1
9         9 2016-06-22   30823     195        8         2
10       10 2016-06-22   30823     195        8         2

或者,显示该商品是否被多次订购的二进制变量也可以完成这项工作。我知道可以使用 sum() 轻松计算每一行:

> sum(df$order_date=="2016-06-22" & df$user_id==30823)
[1] 8
> sum(df$item_id==561 & df$user_id==30823)
[1] 2

但我宁愿让它自动运行,而不必为数千个条目手动运行。我的想法真的用完了,非常感谢您的帮助!

最佳答案

library(data.table)
setDT(df)

df[, same_day := .N, by = .(order_date, user_id)]
df[, same_item := .N, by = .(order_date, user_id, item_id)]

df
#     order_id order_date user_id item_id same_day same_item
#  1:        1 2016-06-22   30822     643        2         1
#  2:        2 2016-06-22   30822     337        2         1
#  3:        3 2016-06-22   30823     270        8         1
#  4:        4 2016-06-22   30823     142        8         1
#  5:        5 2016-06-22   30823     561        8         2
#  6:        6 2016-06-22   30823     561        8         2
#  7:        7 2016-06-22   30823      72        8         1
#  8:        8 2016-06-22   30823     106        8         1
#  9:        9 2016-06-22   30823     195        8         2
# 10:       10 2016-06-22   30823     195        8         2

或者用 dplyr

library(dplyr)

df <- 
 df %>% 
   add_count(order_date, user_id, name = 'same_day') %>% 
   add_count(order_date, user_id, item_id, name = 'same_item')

df
# # A tibble: 10 x 6
#    order_id order_date user_id item_id same_day same_item
#       <int> <chr>        <int>   <int>    <int>     <int>
#  1        1 2016-06-22   30822     643        2         1
#  2        2 2016-06-22   30822     337        2         1
#  3        3 2016-06-22   30823     270        8         1
#  4        4 2016-06-22   30823     142        8         1
#  5        5 2016-06-22   30823     561        8         2
#  6        6 2016-06-22   30823     561        8         2
#  7        7 2016-06-22   30823      72        8         1
#  8        8 2016-06-22   30823     106        8         1
#  9        9 2016-06-22   30823     195        8         2
# 10       10 2016-06-22   30823     195        8         2

关于r - 如何计算数据框每一行的相同值的条目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59862779/

相关文章:

javascript - 使用 OpenCPU 下载用于生成绘图的数据

python - 在 Pandas 中按组回填列

R Tidymodels : What objects to save for use in production after fitting a recipe-based workflow utilizing pre-processing?

java - 检查数组是否至少有两个具有特定值的元素

c++ - 这个 `do..while` 循环不工作

java - 如何计算列表中整数的出现次数并正确输出?

json - R 中的嵌套分层数据框

python - 如何将一系列的一个值转换为仅 float ?

r - 更改图例中的字体大小

python - 为什么通过 Cholesky 分解反转正定矩阵比使用 numpy 进行常规反转慢?