问题标签 [data.table]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
48477 浏览

r - 将带有 dimnames 的矩阵转换为长格式 data.frame

希望这里有一个简单的答案,但我在任何地方都找不到。

我有一个带有行名和列名的数字矩阵:

我想将矩阵融合为长格式,一列中的值和矩阵行和列名各在一列中。结果可能是这样data.table的:data.frame

任何提示表示赞赏。

0 投票
4 回答
298 浏览

r - 从两个表的组合中找到最大值(for循环太慢)

我有一个数据表“the.data”,其中第一列表示测量仪器,其余不同的测量数据。

我还定义了仪器组,例如,组 1 (g1) 指的是仪器 1 和 2。

我需要找出每个组的总和在哪个小时具有每种数据类型的最大值,以及它的总和。

g1 小时 1:sum(da)=12+14=26 g1 小时 2:sum(da)=19+15=34

因此,对于 g1 和 da,答案是 2 小时和 34 小时。

我在 for 循环中使用 for 循环来执行此操作,但这需要很长时间(几个小时后我中断了)。问题是.data 大约有 100.000 行长,并且大约有 5.000 个组,每个组有 2-50 个仪器。

有什么好的方法可以做到这一点?

衷心感谢 Stack-overflow 的所有贡献者。

更新:现在示例中只有五个组。

/克里斯

0 投票
1 回答
927 浏览

r - 在具有重复观察的行之间产生精确加权平均值

我有一个类似于下面生成的数据框。有些人对特定变量有多个观察值,并且每个变量都有一个相关的估计标准误差 (SE)。我想为每个人创建一个只包含一行的新数据框。对于具有多个观察值的个人,例如 Kim 或 Bob,我需要根据估计的标准误差以及新计算的加权平均值的方差来计算精确加权平均值。例如,对于 Bob,对于 var1,这意味着我希望他在新数据帧中的 var1 值是:

对于 Bob 的新 SE1,这将是加权平均值的方差,为:

我尝试使用聚合函数并且能够计算值的算术平均值,但是我编写的简单函数不使用标准误差,也不能处理 NA。

在开发一些代码以解决此问题时,我们将不胜感激。这是示例数据集。

0 投票
3 回答
14773 浏览

r - 根据特定因素组合对行求和

这可能是一个愚蠢的问题,但我已经阅读了 Crawley 关于数据帧的章节并搜索了互联网,但还没有能够使任何工作。

这是一个类似于我的示例数据集:

我想做的是创建一个场景,只要存在独特的站点、植物和处理以及植物编号组合,就可以将“种子”和“果实”相加。理想情况下,这会导致行数减少,但会保留原始列(即我需要上面的示例看起来像这样:)

这个例子非常基础(我的数据集约为 5000 行),虽然在这里您只看到需要求和的两行,但需要求和的行数各不相同,范围从 1 到 ~45。

到目前为止,我已经尝试了 rowsum() 和 tapply() 的结果非常糟糕(错误告诉我这些函数对因子没有意义),所以如果你能指出我正确的方向,我将不胜感激!

非常感谢!

0 投票
4 回答
14085 浏览

r - 为丢失的时间步添加行的最快方法?

我的数据集中有一列,其中时间段 ( Time) 是范围从 ab 的整数。有时,任何给定的组都可能缺少时间段。我想用NA. 以下是 1 个(几个 1000 个)组的示例数据。

如您所见,时间 3 不见了。通常可能缺少一个或多个。我可以自己解决这个问题,但恐怕我不会以最有效的方式做到这一点。我的方法是创建一个函数:

生成从min(Time)到的时间段序列max(Time)

然后做一个setdiff来获取缺失Time值。

将该向量转换为data.frame

提取唯一标识符变量(Id以及上面未列出的其他变量),并将其添加到此 data.frame。

合并两者。

从函数返回。

因此,整个过程将按如下方式执行:

实现这一目标的更好方法?

0 投票
2 回答
1189 浏览

r - 替代 sqlite 或更好的方法来处理 sqlite 中的日期/时间字段

我的数据往往是中型到大型,但从不符合“大”数据的条件。数据几乎总是复杂的关系。出于我在这里讨论的目的,10-50 个表,总大小为 1-10 GB。而已。当我处理比这更大的数据时,我会把它放到 Postgres 或 SQL Server 中。

总的来说,我喜欢 SQLite,但我使用的数据有很多日期/日期时间字段,在 SQLite 中处理日期字段让我很头疼,当我在 R 和 SQLite 之间来回移动数据时,我的日期经常被弄乱.

我正在寻找一种基于文件的 SQLite 替代方案,该替代方案在 R 中易于使用。

或者

用于将数据移入/移出 SQLite 和 R 而不破坏日期的更好技术/包。我的目标是停止破坏我的约会。例如,当我使用 RSQLite 包中的 dbWriteTable 时,我的日期通常会以一种无法使用的方式搞砸。

我的主要工作站运行的是 Ubuntu,但我在一个以 Windows 为主的办公室工作。如果建议使用 SQLite 的替代方案,则 +++ 可以在两个平台(或更多平台)上工作的替代方案。

0 投票
2 回答
308 浏览

python - R中的数据重排

我有几个这样的 CSV 文件:

(在我使用的实际情况下,共有三个文件,总共 1,408,378 行。)对于绘图,我想将它们重新调整为这种格式:

其中“标签”源自 CSV 文件的名称;“stream”是一个序列号,分配给一个文件中“site”、“run”和“id”的每个组合(因此,仅在“label”中是唯一的);'i' 是每个 'stream' 中的行号;'dir' 和 'payload' 直接取自原始文件。我还想丢弃每个流的前 20 行以外的所有行。我事先知道 CSV 文件中的每个单元格(标题除外)都是一个正整数,并且“dir”只取值 1 和 2。

我用 终止了我最初的尝试plyr,因为经过一个多小时的计算,它已经运行了高达 6GB 工作集的 R 进程,而且看不到尽头。foreach最新的对并行性的闪亮新支持plyr并没有帮助:八个进程每个运行 10 分钟的 CPU 时间,然后它又回到一个进程,又持续了一个小时,是的,再次炸毁了我的 RAM。

于是我用 Python 给自己写了一个帮助脚本,用它我更流利:

并从 R 脚本中调用它:

五秒钟内完成。

所以问题是:在 R 中执行此操作的正确方法是什么?不是这个特定的任务,而是这类问题。在分析数据之前,我几乎总是需要对一堆数据进行洗牌,而且在其他语言中它几乎总是更容易——无论是我编写代码还是计算机执行它。这让我觉得我只是将 R 用作一个接口,如果我改为ggplot2学习的话,从长远来看,也许我会节省自己的时间。matplotlib

0 投票
2 回答
398 浏览

performance - R中数据的快速边界

假设我有一个向量 ,vec它很长(从 1E8 个条目开始)并且想将它绑定到范围[a,b]。我当然可以编码vec[vec < a] = aand vec[vec > b] = b,但这需要两次传递数据并为临时指标向量分配大量 RAM(~800MB,两次)。两者都通过了刻录时间,因为如果我们只将数据从主内存复制到本地缓存一次,我们可以做得更好(对主内存的调用很糟糕,缓存未命中也是如此)。谁知道多线程可以改善多少,但我们不要贪心。:)

在基本 R 或我忽略的某个包中是否有一个很好的实现,或者这是 Rcpp (或我的老朋友data.table)的工作?

0 投票
3 回答
11735 浏览

r - 使用 data.table 标记组中的第一条(或最后一条)记录

给定一个排序键,是否有一个 data.table 快捷方式来复制SAS 和 SPSS 中的first和功能?last

下面的行人方法标记了一组的第一个记录。

鉴于 data.table 的优雅(我正在慢慢熟悉它),我假设有一个使用自连接 & 的快捷方式mult,但我仍在试图弄清楚。

这是示例:

0 投票
2 回答
11632 浏览

r - 在我自己的包中使用 data.table 包

我正在尝试在我自己的包中使用 data.table 包。MWE如下:

我创建了一个函数 test.fun,它只是创建了一个小的 data.table 对象,然后对“A”列分组的“Val”列求和。代码是

当我在常规 R 会话中创建此函数,然后运行该函数时,它按预期工作。

当我将此函数放入一个包中,安装包,加载包,然后运行该函数时,我收到一条错误消息。

任何人都可以向我解释为什么会发生这种情况以及我可以做些什么来解决它。很感谢任何形式的帮助。