我有两个带有相应值的 data.frame 索引向量(行、列),构建新 data.frame 的最快方法是什么?

2024-04-07

我有一个包含 3 列的数据框 (df1)。其中两个表示新 data.frame (df2) 的索引,其余列包含应放置在 df2 中的值。如果我忽略了正确的答案,我很抱歉。

  df1 <- data.frame(
row = c(1,3,1,2,3),
col = c(2,2,1,2,1),
value = c(1:5)
)

作为输出我想要以下内容:

Column 1 Column 2
3 1
NA 4
5 2

有没有一种方法可以实现这一目标,而无需迭代表(或应用)? 我想加快我的功能,所以快速的方法会非常有帮助。提前致谢!

以下内容无法按预期工作:

df2 <- data.frame(matrix( nrow = 3, ncol = 2 ))

df2[df1$row, df1$col] <- df1$value

您必须提供行索引和列索引:matrix. cbind可以用这两个向量创建行和列matrix.

df2 <- data.frame(matrix( nrow = 3, ncol = 2 ))
df2[cbind(df1$row, df1$col)] <- df1$value
df2
#  X1 X2
#1  3  1
#2 NA  4
#3  5  2

或者更好(更快,更少的内存消耗)填充matrix然后将其转换为data.frame.

df2 <- matrix(NA_integer_, 3, 2)
df2[cbind(df1$row, df1$col)] <- df1$value
df2 <- as.data.frame(df2)

或者一步一步完成。

df2 <- as.data.frame(`[<-`(matrix(NA, 3, 2), cbind(df1$row, df1$col), df1$value))

或者计算向量中索引的位置。

df2 <- matrix(NA_integer_, 3, 2)
df2[df1$row + (df1$col - 1L) * 3L] <- df1$value
df2 <- as.data.frame(df2)

基准

set.seed(0)
NR <- 10000L
NC <- 100L
df1 <- cbind(expand.grid(row=seq_len(NR), col=seq_len(NC)), value=
            sample(0:9, NR*NC, TRUE))[sample(NR*NC, floor(0.9 * NR * NC)),]

library(tidyverse)
library(data.table)
library(Matrix)
bench::mark(check=FALSE,
cbindTwoStep = {df2 <- data.frame(matrix( nrow = NR, ncol = NC ))
    df2[cbind(df1$row, df1$col)] <- df1$value} ,
cbindMatTwoStep = {df2 <- matrix(NA_integer_, NR, NC)
  df2[cbind(df1$row, df1$col)] <- df1$value
  df2 <- as.data.frame(df2)} ,
cbindMatDF = df2 <- data.frame(`[<-`(matrix(NA_integer_, NR, NC), cbind(df1$row, df1$col), df1$value)),
cbindMatADF = df2 <- as.data.frame(`[<-`(matrix(NA_integer_, NR, NC), cbind(df1$row, df1$col), df1$value)),
vecIndex = {df2 <- matrix(NA_integer_, NR, NC)
  df2[df1$row + (df1$col - 1L) * NR] <- df1$value
  df2 <- as.data.frame(df2)},
pivot = {df2 <- df1 |> 
  arrange(row, col) |> 
  pivot_wider(names_from = col, values_from = value) |> 
  select(!row)},
data.table = df2 <- dcast(as.data.table(df1), row ~ paste("Column", col))[, -1],
sparseMatrix = df2 <- as.matrix(sparseMatrix(i = df1[, 1], j = df1[, 2], x = df1[, 3])),
xtabs = df2 <- as.data.frame.matrix(xtabs(value ~ ., df1)) )

Result

  expression           min   median `itr/sec` mem_alloc `gc/sec` n_itr  n_gc
  <bch:expr>      <bch:tm> <bch:tm>     <dbl> <bch:byt>    <dbl> <int> <dbl>
1 cbindTwoStep     59.99ms 132.42ms     6.41     79.2MB    11.2      4     7
2 cbindMatTwoStep    8.6ms   9.48ms    92.5      21.8MB    21.6     47    11
3 cbindMatDF        8.63ms   9.51ms    61.2      21.8MB    13.8     31     7
4 cbindMatADF       8.24ms    9.4ms    95.7      21.8MB    19.9     48    10
5 vecIndex          8.12ms      9ms    97.7      14.9MB    19.9     49    10
6 pivot            97.59ms  99.75ms     9.99     92.6MB    12.0      5     6
7 data.table      171.63ms 172.34ms     5.41     88.4MB     5.41     3     3
8 sparseMatrix     23.73ms  30.18ms    17.6      38.5MB     7.82     9     4
9 xtabs               1.1s     1.1s     0.909   269.9MB     5.46     1     6

填写中的值matrix using cbind然后将其转换为data.frame比填充 a 更高效data.frame。计算向量上的索引稍快一些,并且使用的额外内存量最少。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我有两个带有相应值的 data.frame 索引向量(行、列),构建新 data.frame 的最快方法是什么? 的相关文章

  • 使用 readHTMLTable 从 https 网页读取表格

    我安装了 R 3 3 1 并使用 RStudio 0 99 903 我正在尝试从以下 URL 将表格读入 R https www fantasypros com nfl rankings consensus cheatsheets php
  • 聚合日期时间以总结在特定条件下花费的时间

    我很困惑我应该如何继续 我下面有一些虚拟数据 Date lt as POSIXct c 2018 03 20 11 52 25 2018 03 22 12 01 44 2018 03 20 12 05 25 2018 03 20 12 10
  • 从 data.frame 中提取时用 NA 填充缺失的列

    我有一个函数 它将具有某些列的数据框作为输入 columns a b z 现在我有一个数据框DF只有很少的这些列DF columns f u z 如果列不在其中 如何创建一个包含所有值为 NA 的列的数据框DF这与DF在柱子上 f u z
  • 如何有效地将多个光栅 (.tif) 文件导入 R

    我是 R 新手 尤其是在空间数据方面 我正在尝试找到一种方法来有效地将多个 600 单波段栅格 tif 文件导入到 R 中 所有文件都存储在同一文件夹中 不确定这是否重要 但请注意 在我的 Mac 和 Windows 并行 VM 上的文件夹
  • 在`rmarkdown`中,如何在句子中添加图标?

    In rmarkdown 如何在句子中添加图标 例如如下 如何添加markdown icon单词 Markdown 和 is 之间 有一个很好的 R 包 可以轻松下载 RMarkdown 文档并将图标添加到其中 icons https gi
  • 为什么我的 postgis 不在几何字段上使用索引?

    Windows 上的 postgresql 9 5 postgis 2 2 我首先创建一个表 CREATE TABLE points id SERIAL ad CHAR 40 name VARCHAR 200 然后 添加一个几何字段 geo
  • 如何使用autoconf重新生成配置文件?

    我使用 autoconf 重新生成配置文件 它有效 但是当我执行生成的配置文件时 configure 有一些错误消息 例如 configure line 3713 syntax error near unexpected token bla
  • 如何在基数 R 中进行分组

    我想使用以下 SQL 查询来表达base R 没有任何特定的包 select month day count as count avg dep delay as avg delay from flights group by month d
  • R:ifelse 中的字符串列表

    我正在寻找与 MySQL 中的 where var in 语句类似的东西 我的代码如下 data lt data frame id 10001 10030 cc1 rep c a b c 10 attach data data new lt
  • 根据 R 数据框中的名称对列进行平均

    我想知道是否有一种有效的方法来获取每组的平均值类似命名的列谁的名字结尾为 1S and 2S ex ex1S ex2S at time 1并取每组的平均值类似命名的列谁的名字结尾为 1C or 2C ex ex1C ex2C at time
  • 在 Lavaan 生长曲线模型中提取个体轨迹

    我已经使用 R 的 Lavaan 包中的 Growth 函数成功地对一项研究的纵向数据进行了建模 我找不到任何关于如何提取每个参与者的预测轨迹的记录 我只能找到整个组的预测轨迹 在摘要输出的 拦截 部分下给出 使用 lavPredict m
  • R 中使用 `UseMethod()` 与 `inherits()` 来确定对象的类

    如果我需要根据 R 对象的类以不同的方式处理它们 我可以使用if and else在单个函数内 foo lt function x if inherits x list Foo the list else if inherits x num
  • 按组计算连续行中的值之间的差异

    这是我的一个df 数据框 group value 1 10 1 20 1 25 2 5 2 10 2 15 我需要按组计算连续行中的值之间的差异 所以 我需要一个结果 group value diff 1 10 NA because the
  • R 多元一步预测和准确性

    我想使用 R 来比较两个预测模型的 RMSE 均方根误差 第一个模型使用 1966 年至 2000 年的估计值来预测 2001 年 然后使用 1966 年至 2001 年的估计值来预测 2002 年 依此类推直至 2015 年 第二个模型使
  • 更改 pander 中的默认对齐方式 (pandoc.table)

    我目前正在切换到pander对于我的大部分时间knitr markdown格式化 因为它提供了如此出色的pandoc支持 我不太满意的一件事是默认的居中对齐 营销人员可能会喜欢它 但对于技术报告来说这是一个可怕的事情 使用的最佳选择Hmis
  • 汇总表中各列的字符值比例

    在这种数据框中 df lt data frame w1 c A A B C A w2 c C A A C C w3 c C A B C B 我需要计算所有列中字符值的列内比例 有趣的是 以下代码适用于大型实际数据集 但对上述玩具数据会引发错
  • 手动设置scale_fill_distiller()的比例

    我正在尝试制作一系列图表进行比较 举例来说 我想使用iris数据集来制作这样的图 其中我已过滤以仅查看 setosa 物种 library ggplot2 library dplyr iris gt filter Species setos
  • 如何定义“f_n-chi-square”函数并使用“uniroot”求置信区间?

    I want to get a 95 confidence interval for the following question 我已经写了函数f n在我的 R 代码中 我首先使用 Normal 随机采样 100 个样本 然后定义函数h
  • 如何绘制堆积比例图?

    我有一个数据框 x lt data frame id letters 1 3 val0 1 3 val1 4 6 val2 7 9 id val0 val1 val2 1 a 1 4 7 2 b 2 5 8 3 c 3 6 9 我想绘制一个
  • 从 R 中的方差分析 (glm) 中提取残余偏差

    我在 R 中安装了一个 glm 模型并采用了方差分析表 我需要提取 残余偏差 列 但它会产生错误 以下是代码 创建数据 counts lt c 18 17 15 20 10 20 25 13 12 outcome lt gl 3 1 9 t

随机推荐

  • 如何在Android Studio中导入libstreaming?

    我是一名使用 Eclipse IDE 的老开发人员 现在我切换到 Android Studio 我想使用下面的教程 直播库 http www androidhive info 2014 06 android streaming live c
  • 如何只打开一个 fancybox 窗口(而不是 onclick)

    我正在触发 fancybox 打开onclick像这样 telefonosOtrosPaises fancybox type iframe href http es solmelia com nMenus jsp telefonosOtro
  • 使用 rust-cpython 从 Rust 并行运行 Python 代码

    我正在尝试使用 Rust 加速数据管道 该管道包含一些我不想修改的 Python 代码 因此我尝试使用 Rust 按原样运行它们rust cpython https docs rs cpython 0 4 1 cpython 和多线程 然而
  • 在 MVC5 中运行更新数据库时出错

    我有一个 MVC 5 应用程序 它的 MySQL 数据库托管在 Azure 中 它运行得很好 但是今天当我尝试输入 Update Database 并运行它时 我收到以下错误消息 System Runtime Serialization S
  • 如何在 Fossil 中闭合叶子

    The Fossil SCM 中的分支文档 http www fossil scm org index html doc tip www branching wiki表示如果叶子具有闭合标签 则该叶子被视为闭合 然而 当我进入 gt fos
  • 通过 jQuery Ajax 传递 PHP 数组

    我有一个 php 数组 toField explode ids Which looks something like 24 25 26 29 我想通过 jQuery AJAX 传递这个数组 如下所示
  • 将外语从csv文件导入到Stata

    我正在使用Stata 12 我遇到了以下问题 我正在使用以下命令将一堆 csv 文件导入到 Statainsheet命令 数据集可能包括俄语 克罗地亚语 土耳其语等 我认为它们是用 UTF 8 编码的 在 csv 文件中 它们是正确的 我把
  • ProGuard 混淆、java、Google Gson 和通用集合 - 如何保留成员?

    我有一堂这样的课 public class MyClass private Queue
  • 如何使用 KIF 框架模拟位置服务

    我使用KIF框架 http github com kif framework KIF http github com kif framework KIF 用于 UI 测试 我需要模拟位置服务 问题是位置服务在 KIF 方法 beforeAl
  • 选项卡面板中的 Vbox 布局问题

    我有一个问题vbox布局所以我创建了一个简单的例子 这说明了问题 这让我vbox布局到fit屏幕的高度 On the hbox屏幕上 视图看起来符合预期 然而 当我简单地改变hbox to vbox所有文本都覆盖在左上角 所有代码都在下面给
  • 如何在 Windows 脚本宿主中使用 jQuery?

    我正在编写一些需要解析大量包含 HTML 片段的文件的代码 看起来 jQuery 对此非常有用 但是当我尝试将 jQuery 加载到 WScript 或 CScript 之类的内容中时 由于 jQuery 对窗口对象的许多引用 它会抛出错误
  • 访问 Node JS Lambda 中的 AWS SSM 参数

    我能够在 NodeJS 中本地从 AWS SSM 参数存储中检索数据 但当我将代码移至 Lambda 时却无法检索数据 我搜索过 但没有找到很多使用 NodeJS 设置 Lambda 且不使用 无服务器 框架的示例 我知道我错过了一些简单的
  • Polymer + Dart2js 不工作

    当我使用 Polymer 库创建新应用程序时 它会生成一个示例项目 该项目在 Dartium 中运行得很好 但是当我编译它时 使用pub build 它不再起作用了 我收到两个 404 错误和一个未捕获的类型错误 这是我在 Chrome 中
  • 使用 JNI 链接静态库

    Java 8 之前的 Java 版本要求本机代码位于共享库中 但我读到 在 Java 8 中可以将静态链接库与 JNI 一起使用 我搜索过示例但找不到任何示例 如何将 JNI 库静态链接到我的 java 应用程序中 Java SE 8规范已
  • asp.net web 表单中的 ASP.Net 路由

    我正在为我的网站使用 ASP Net Web 表单路由 但我想让它更具结构性并使用适当的结构隐藏所有查询字符串 ID 例如Language Category PageName Title例子 www abc com en sports cr
  • 将图像保存到文件

    我正在开发一个基本的绘图应用程序 我希望用户能够保存图像的内容 我想我应该使用 System Drawing Drawing2D GraphicsState img drawRegion CreateGraphics Save 但这对我保存
  • GWT获取应用程序的路径

    我有一个 GWT 应用程序 当我在运行应用程序后部署本地主页时 其主页为 localhost 8888 myapp html 但当我们将其部署到服务器时 在应用程序运行后其主页为 107 20 239 198 8080 myapp myap
  • 如何使用 3rd 方 SDK 遵循 MVP 架构?

    我看过很多项目展示如何在 MVP 中实现登录 但找不到任何与 Google Facebook 登录相关的内容 当登录流程与Android组件生命周期强绑定时我们该怎么办 我看到 MVP 的主要好处是我们在上面构建了一个抽象Context 但
  • 如何在eclipse中添加sbteclipse插件

    我正在使用 sbt 0 13 我想添加 sbteclipse 插件 以便 eclipse 导入我的 sbt 项目 我可以轻松编写我的 scala 代码 在互联网上搜索时我得到了this https github com typesafehu
  • 我有两个带有相应值的 data.frame 索引向量(行、列),构建新 data.frame 的最快方法是什么?

    我有一个包含 3 列的数据框 df1 其中两个表示新 data frame df2 的索引 其余列包含应放置在 df2 中的值 如果我忽略了正确的答案 我很抱歉 df1 lt data frame row c 1 3 1 2 3 col c