在 data.table 中使用 .EACHI 时如何访问“i”的所有列

2024-03-28

as per ?data.table使用时x[i,j] where i is a data.table,列i可以通过以下方式访问i.column in j。 我的问题是如何一次访问所有列?

Example:

library(data.table)
set.seed(1L)
DT <- data.table(A=c('a','a','b','b','c','c'),
                 B=rnorm(6L),
                 C=rnorm(6L),
                 key='A')
#   A           B           C
#1: a  0.82122120  0.61982575
#2: a  0.59390132 -0.05612874
#3: b  0.91897737 -0.15579551
#4: b  0.78213630 -1.47075238
#5: c  0.07456498 -0.47815006
#6: c -1.98935170  0.41794156

DT2 <- data.table(A=c('a','b','c'),
                  B=rnorm(3L),
                  C=rnorm(3L),
                  key='A')
#   A          B           C
#1: a  1.3586796 -0.05380504
#2: b -0.1027877 -1.37705956
#3: c  0.3876716 -0.41499456

现在假设我想乘以列B of DT按数量B of DT2对于列的每个匹配值A。 也就是说

0.82122120 * 1.3586796
0.59390132 * 1.3586796
...

我可以执行以下操作,但只是因为我知道这些列被称为B and C,而且因为我有足够的耐心来写所有的专栏。

例如,我如何对 100 列做类似的事情?

DT[DT2,{print(as.matrix(.SD) %*% diag(c(i.B,i.C)))},by=.EACHI]
          [,1]         [,2]
[1,] 1.1157764 -0.033349750
[2,] 0.8069216  0.003020009
            [,1]      [,2]
[1,] -0.09445960 0.2145397
[2,] -0.08039401 2.0253136
            [,1]       [,2]
[1,]  0.02890673  0.1984297
[2,] -0.77121518 -0.1734435

事实上,似乎没有像这样的特殊符号x.SD or i.SD指定所有列(除了在by = ....

然而,mget()可以用作返回预期结果的解决方法:

DT2_cols <- paste0("i.", setdiff(names(DT2), key(DT2)))
DT[DT2,{print(as.matrix(.SD) %*% diag(mget(DT2_cols)))},by=.EACHI]
           [,1]        [,2]
[1,]  0.3891785 -0.02190195
[2,] -0.1140867 -0.03317559
          [,1]         [,2]
[1,]  1.850667 -0.009322052
[2,] -3.533068  0.004944318
           [,1]      [,2]
[1,]  0.3706735 1.4268738
[2,] -0.9229703 0.3679482
Empty data.table (0 rows) of 3 cols: A,B,C

(请注意,这些数字与 OP 不同,因为使用set.seed(1L)我确实变得不同DT and DT2比OP发布的要多。)

编辑:GitHub 上的功能请求

我刚刚注意到这个功能已经被请求了在 GitHub 上 https://github.com/Rdatatable/data.table/issues/935.

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

在 data.table 中使用 .EACHI 时如何访问“i”的所有列 的相关文章

  • 闪亮的如何阻止用户访问选项卡?

    我需要阻止用户访问其他选项卡 直到完成某些操作 在这个可重现的示例中 我想阻止用户访问Tab 2直到他按下按钮 该应用程序如下所示 这是该应用程序的代码 library shiny ui lt shinyUI navbarPage tabP
  • Leaflet Map - 第二个多边形使第一层不可点击

    我正在制作美国社区调查数据地图 目前我有一个主要层 如下所示plotMerge incomePerCapita 它运作良好 有一个完全充实的弹出窗口 图像等等 当我添加第二层以提供县和地区边界时 区域边界变得不可单击 似乎被新层掩盖了 如果
  • 如何使用 R / igraph 设置边缘颜色和顶点间距

    我是 R 新手 试图弄清楚如何为我有数据的系统制作社交网络地图 我已经设法从常见问题解答和教程中弄清楚我想做的大部分事情 但我被困在两件事上 如何使画布更大 图表间隔更大 现在已经太挤了 目前 边缘厚度是根据重量设置的 权重代表不同的状态
  • R+Hadoop:如何从HDFS读取CSV文件并执行mapreduce?

    在以下示例中 small ints to dfs 1 1000 mapreduce input small ints map function k v cbind v v 2 MapReduce函数的数据输入是一个名为small ints的
  • 两组点之间的距离[重复]

    这个问题在这里已经有答案了 因此 在查看了 stackoverflow 上提出的各种问题后 我仍然无法理解 R 中的 dist 函数 甚至无法理解一般的距离矩阵 所以我有两个带有 xy 坐标的数据框 df1 lt data frame x
  • 与 data.table 合并时防止重复列

    我有两个数据表 它们的列名部分相似 dfA lt read table text A B C D E F G iso year matchcode 1 0 1 1 1 0 1 0 NLD 2010 NLD2010 2 1 0 0 0 1 0
  • R 语言 - 等待用户使用 scan 或 readline 输入

    我试图让用户输入一些关键字进行查询 在我的脚本中我使用了 scan 或 readline 我使用 R 嵌入脚本编辑器 Windows 进行了尝试 但是当我执行代码时 它使用我的下一行脚本作为标准输入 这是我的 部分 脚本 keywords
  • 如何在 R 中执行随机森林/交叉验证

    我无法找到对我尝试生成的回归随机森林模型执行交叉验证的方法 因此 我有一个数据集 其中包含 1664 个解释变量 不同的化学性质 和一个响应变量 保留时间 我正在尝试生成一个回归随机森林模型 以便能够预测给定保留时间的物质的化学性质 ID
  • 运行 R.exe 会创建临时文件吗?

    我在想 是否启动 R exewindows创建临时文件并 是否解释类似x lt 5写入那些临时文件 如果创建了临时文件 它们存储在哪里 如果我启动多个 R exe 实例会发生什么情况 他们会共享并覆盖彼此的临时文件吗 R 的每个实例都有自己
  • 从 foreach 循环赋值

    我想并行化一个循环 例如 td lt data frame cbind c rep 1 4 2 rep 1 5 rep 1 10 2 names td lt c val id res lt rep NA NROW td for i in l
  • 更改列的顺序

    我正在处理一个包含 gt 40 列的大型数据框 我希望能够移动列 而不必指定所有列名称 例如 a lt c 1 5 b lt c 4 3 2 1 1 Percent lt c 40 30 20 10 10 Labels lt c Cat D
  • 在 Bookdown 中呈现附录图号

    Bookdown 是一个很棒的软件包 我期待看到它如何发展 但现在我在渲染数字方面遇到了麻烦pdf document2附录中的数字时的格式 具体来说 当带有标题的图形位于附录中时 图形编号应采用 A 1 A 2 B 1 B 2 等形式 但图
  • xml2 包 (R) 中的 xml_find_all 函数未找到相关节点

    我使用 R 中的 xml2 包来访问 xml 数据 发现它在不同的 xml documents 上表现不同 在这个宠物的例子中 library xml2 doc lt read xml
  • 使用facet时ggplot2控制每行的面板数量?

    Is it possible to control the number of panels per row in a ggplot I can only get an equal number of panels on each row
  • 为 RStudio Server 1.0.44 配置日志目录

    我在 CentOS 7 上运行 RStudio Server 1 0 44 根据文档 https support rstudio com hc en us articles 200554766 RStudio Server Applicat
  • geom_密度匹配geom_histogram binwitdh

    我想在 ggplot2 中的分布条形图上添加一条线以显示平均分布 但遇到了麻烦 像这样的 ggplot 调用 ggplot x aes date received geom histogram aes y count binwidth 30
  • R 的 dplyr 切片中的奇怪行为

    打电话时slice df i 在 R 的 dplyr 包中 如果我要求的行索引不存在 nrows lt i 它似乎返回除组中的第一行之外的所有行 就像我调用的那样slice df 1 例如 library dplyr c1 lt c a b
  • R Shiny - 修复了 Shiny 仪表板中的侧边栏和主标题

    我有一个简化的闪亮仪表板 请参阅下面的代码 我想修复侧边栏和主标题 因此 在其他帖子的帮助下 我编写了一个 CSS 文件来解决该问题 sidebar color FFF position fixed width 220px white sp
  • R markdown 引文标识符

    R markdown 允许使用 YAML 元数据部分中的参考书目元数据字段指定参考书目文件 例如 title Sample Document output html document bibliography bibliography bi
  • (R 错误)错误:cons 内存耗尽(达到限制?)

    我正在处理大数据 并且有一个 70GB 的 JSON 文件 我正在使用 jsonlite 库将文件加载到内存中 我尝试过 AWS EC2 x1 16large 机器 976 GB RAM 来执行此负载 但 R 因错误而中断 Error co

随机推荐