【问题标题】:Subsetting Data Table / Counting rows子集数据表/计数行
【发布时间】:2016-06-30 08:41:52
【问题描述】:

当我使用以下代码通过商店代码计算数据表中的行数时:

DailyProduct[, .N, by = ANA_Code]

我得到了 14 个商店代码,总行数为 120,237 - DailyPRoduct 中的行数相同,这很棒!

如果我得到一个唯一的商店代码列表:

unique(DailyProduct$ANA_Code)

我得到了 21 个商店代码,这比我上面得到的要多,但实际上是正确的数字。

如果我将商店代码从数字转换为因子,一切都按预期显示,我得到 21 个商店,每个商店的行数加起来为 120,237

这也导致我在汇总数据时出现问题,销售值正确但缺少 7 个商店代码。

在执行这些操作时,数据表处理数值与因子的方式是否存在根本区别?

我不明白为什么会发生这种情况,所以我无法提供这样的例子,因此对此深表歉意。

【问题讨论】:

  • 你能检查一下'ANA_Code'是否是一个大数字。如果是这种情况,请在使用fread 读取数据之前加载library(bit64)
  • 能否添加一对包含在 14 中的商店代码和一对排除在外的商店代码?
  • 不知道这是否是相关的,但我用这个在我的剧本,因为R.将这段代码转换,以科学记数法:options(width = 58, scipen=999, digits = 4)在14包括:5000128300519 5000128680145 5000128022033 5000128300386 5000128680077 5000128888222 5000128020394 5000128211048 5000128689599 5000128689641 5000128210764 5000128689544 5000128689557 5000128781235以下所有被排除在计数,但包括在唯一命令5000128680080 5000128689557 5000128689586 5000128689609 5000128689612 5000128689625 5000128689638 跨度>
  • 这是一个大整数向量,正如我在评论和答案中提到的那样,这可能会产生问题。你试过bit64吗?
  • @akrun 数据是通过 ODBC 从 Teradata 提取的 - 有什么不同吗?

标签: r data.table


【解决方案1】:

如果“ANA_Code”是一个大整数并且使用fread 读取它时可能会发生错误输出。一种方法是加载bit64 库,然后使用fread 读取它

 library(bit64)
 library(data.table)
 DailyProduct  <- fread("yourfile.csv")

【讨论】:

  • 我想我会在这里回复以避免混淆 - str(DailyProduct) 显示为 num 在我遇到问题之前,这个数字有多“大”?我可以使用不同的代码来识别商店,但这意味着我试图避免的很多下游变化。
  • @MidnightDataGeek 这就是问题所在。它不能取大数字
  • 感谢您的帮助。我将重新编写我的 SQL 并使用不同的商店代码。
  • 当我使用长存储代码合并 2 个数据表时,这也会给我带来问题吗?昨天我在以前从未有过的“by.x”条件下使用它时遇到了问题。所以 by.x = c("Store_Code", "Product") 给了我虚假的结果,但是当我创建“Store_Code|Product”的键并使用它时它工作正常吗?
  • 再次感谢您的快速回复,非常感谢。将班级更改为角色已经奏效!
猜你喜欢
  • 2016-07-02
  • 1970-01-01
  • 2012-08-28
  • 2013-01-26
  • 1970-01-01
  • 2018-04-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多