在 R 中合并两个数据帧时进行聚合

2024-01-24

最终目标是求总数量(transact_data$qty) 对于每条记录product_info哪里的transact_data$productId存在于product_info,以及哪里transact_data$date在。。。之间product_info$beg_date and product_info$end_date.

数据框如下:

product_info <- data.frame(productId = c("A", "B", "A", "C","C","B"), 
                      old_price = c(0.5,0.10,0.11,0.12,0.3,0.4),
                      new_price = c(0.7,0.11,0.12,0.11,0.2,0.3),
                      beg_date = c("2014-05-01", "2014-06-01", "2014-05-01", "2014-06-01","2014-05-01", "2014-06-01"),
                      end_date = c("2014-05-31", "2014-06-31", "2014-05-31", "2014-06-31","2014-05-31", "2014-06-31"), stringsAsFactors=FALSE)

transact_data <- data.frame(productId=c('A', 'B','A', 'C','A', 'B','C', 'B','A', 'C','A', 'B'),
                  date=c("2014-05-05", "2014-06-22", "2014-07-05", "2014-08-31","2014-05-03", "2014-02-22",
                    "2014-05-21", "2014-06-19", "2014-03-09", "2014-06-22","2014-04-03", "2014-07-08"),
                    qty =c(12,15,5,21,13,17,2,5,11,9,6,4), stringsAsFactors=FALSE)

我的第一步是按 ProductId 合并两个数据框:

sku_transact_merge <-merge(x=product_info, y=transact_data, by = c("productId"))

下一步是计算数量总和:

sku_transact_merge$total_qty <- ifelse(sku_transact_merge$date >= sku_transact_merge$beg_date & 
                                       sku_transact_merge$date <= sku_transact_merge$end_date, 
                                     aggregate(qty ~ productId+beg_date+end_date,
                                               data= sku_transact_merge, sum), 0)

结果不是我想要的,并且我收到一条错误消息

(列表)对象不能被强制输入“double”

任何有关如何正确执行此逻辑的指示将不胜感激!


这可能是另一种方法来做到这一点使用dplyr() (如果你的数据集很大,这应该很有效)

library(dplyr)
df = subset(sku_transact_merge, date > beg_date & date < end_date)
df = subset(df, select= -c(date))
out = unique(df %>% group_by(productId,old_price) %>% mutate(qty = sum(qty)))

#> out
#Source: local data frame [6 x 6]
#Groups: productId, old_price

#productId old_price new_price   beg_date   end_date qty
#1         A      0.50      0.70 2014-05-01 2014-05-31  25
#2         A      0.11      0.12 2014-05-01 2014-05-31  25
#3         B      0.10      0.11 2014-06-01 2014-06-31  20
#4         B      0.40      0.30 2014-06-01 2014-06-31  20
#5         C      0.12      0.11 2014-06-01 2014-06-31   9
#6         C      0.30      0.20 2014-05-01 2014-05-31   2

否则你可以使用data.table

library(data.table)
out = setDT(df)[, list(qtynew = sum(qty)), by = list(productId, old_price)]

#> out
#   productId old_price qtynew
#1:         A      0.50     25
#2:         A      0.11     25
#3:         B      0.10     20
#4:         B      0.40     20
#5:         C      0.12      9
#6:         C      0.30      2
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 R 中合并两个数据帧时进行聚合 的相关文章

随机推荐

  • 如何将实际的 NULL 值插入到可为空的列中?

    function save gmt name address phone remark query INSERT INTO user gmt name address phone remark VALUES gmt name address
  • 如何读取 IRAF 多光谱光谱?

    我在用 Iraf 生成的拟合文件中有一个光谱 波长轴在标头中编码为 WAT0 001 system multispec WAT1 001 wtype multispec label Wavelength units angstroms WA
  • 为什么 HSV 上的颜色分割更容易?

    我听说 如果您需要在软件上进行颜色分割 如果满足某些阈值规则 如 R100 10 主要原因是它将颜色信息 色度 与强度或照明 亮度 分开 由于值是分开的 因此您可以仅使用饱和度和色调构建直方图或阈值规则 理论上 无论值通道中的光照如何变化
  • html中溢出时如何向文本添加三个点? [复制]

    这个问题在这里已经有答案了 How can I show three dots in a text like this 添加所有这些 制作单线 text overflow ellipsis white space nowrap overfl
  • JBoss EAP 7 启动期间“读取属性”操作失败

    我已在 SSL 模式下将应用程序部署在 JBoss EAP 7 上 我的应用程序已部署并成功运行 但在启动过程中 每次服务器启动并且同时部署 WAR 时 我都会在控制台上收到以下错误 不会引发异常 11 28 11 402 ERROR or
  • 无法在鼠标输入时使用 jquery 将焦点设置为下拉列表

    这是我的 html 代码 div hello div div div
  • proguard - AppCompat 不支持 proguard/minify 后的当前主题功能

    我已将支持库从 v22 2 1 更新到 v23 0 0 在构建应用程序 使用 minifyEnabled true 后 出现 AppCompat 不支持当前主题功能 异常 08 23 05 46 10 168 19437 19437 E A
  • C++中纯虚函数有什么用?

    我现在正在课堂上学习 C 我不太理解纯虚函数 我知道它们稍后会在派生类中概述 但如果您只是要在派生类中定义它 为什么要将其声明为等于 0 简单来说 就是让类变得抽象 这样它就不能被实例化 但子类可以重写纯虚方法 形成一个具体的类 这是在 C
  • 根据查询将所有行提取到数组中

    我有以下代码 2 Query database for data result mysql query SELECT FROM tableName query array mysql fetch row result fetch resul
  • 如何使用 EasyPHP 5.3.8 安装 PEAR?

    我正在学习 Yii 并关注杰弗里 温塞特撰写的电子书 https rads stackoverflow com amzn click com 1847199585 该应用程序是基于 TDD 构建的 因此 我需要安装 PHPUnit 来编写单
  • 如何在 Android 13 上打开免提通话

    显然有很多帖子展示了如何在早期 Android 版本上打开扬声器 这些在新操作系统中不起作用 有人可以发布 Xamarin Forms 解决方案吗 AudioManager 在早期版本中使用 但当前操作系统需要额外的权限或不同的 API 提
  • Scala 解析器组合器解析 xml?

    scala 的解析器组合器可以解析 xml 并验证结束标签与开始标签的名称相同吗 我并不直接需要它 但我想知道我的库的限制 是的 它可以做到这一点 使用into or gt gt 实际上是同一件事 根据解析值参数化后一个解析器
  • Symfony 在生产中禁用控制器操作[重复]

    这个问题在这里已经有答案了 当 prod 环境处于活动状态时 是否可以 禁用 特定操作 我有一些不应在生产环境中执行的测试操作 class TestController extends FOSRestController Rest Get
  • Django REMOTE_USER 不存在,但 HTTP_REMOTE_USER 存在

    All 我有一个应该是一个非常简单的问题 我正在尝试按照以下说明使用 REMOTE USER 变量来使用 Django 身份验证 https docs djangoproject com en 1 8 howto auth remote u
  • 部署到 Heroku 错误:找不到模块“/app/server.js”

    我正在将使用 angular cli 创建的 Angular 6 应用程序部署到 Heroku 构建成功完成 但是 当我转到已部署的应用程序时 我看到一个空白页面 运行 Heroku 日志后 启动节点服务器实例时似乎发生错误 崩溃 找不到模
  • 在 Sharepoint 站点中发布 Excel 工作簿

    我有一个 Excel 工作簿 我需要使用 Excel VBA 在 SharePoint 网站中发布它 所以我使用以下代码在模块中创建了一个方法 Private sc Lists As SoapClient30 Public c WSDL U
  • AccessDenied:无权执行 sts:AssumeRoleWithWebIdentity

    我查看过类似的问题 但无法解决我的问题 我正在开发一个 Web 应用程序 用户将使用 AWS Cognito 的身份验证进行身份验证 注册部分正常 但是当我尝试登录时 我收到 未授权 异常 我已经尝试将自定义策略附加到我的 IAM 角色 授
  • 模板之外的类型名

    这在 VS2010sp1 中无法编译 不过它可以使用 gcc 4 6 进行编译 template
  • Flutter apk/ipa 大小与 React Native apk/ipa 大小

    hello world 示例的 React Native APK 大小约为 20M 在最近的版本中 https github com facebook react native issues 23575 因为支持不同的硬件架构 ARMv7
  • 在 R 中合并两个数据帧时进行聚合

    最终目标是求总数量 transact data qty 对于每条记录product info哪里的transact data productId存在于product info 以及哪里transact data date在 之间produc