当前位置: 首页 > 知识库问答 >
问题:

data.table基于"by"参数创建列名

辛承志
2023-03-14

假设我有以下数据

dt <- data.table(var = c("a", "b"), val = c(1, 2))

现在我想向dt添加两个新列,分别命名为ab,具有各自的值(1,2)。我可以使用循环来执行此操作,但我想以data.table的方式执行。

结果将是这样的data.table

dt.res <- data.table(var = c("a", "b"), val = c(1, 2), #old vars 
                     a = c(1, NA), b = c(NA, 2)) # newly created vars

到目前为止,我想出了类似这样的东西

dt[, c(xx) := val, by = var]

其中< code>xx是一个< code > data . table -类似于< code >的命令。N,它寻址< code > by -组的值。

谢谢你的帮助!

附录:for-loop 方式

具有< code > for -循环而不是< code > by -参数的非data.table-way看起来像这样:

for (varname in dt$var){
     dt[var == varname, c(varname) := val]
}

共有1个答案

陶原
2023-03-14

基于所展示的示例,我们可以使用data.table中的dcast将长格式转换为宽格式,并在'val'列上与原始数据连接。

library(data.table)#v1.9.6+
dt[dcast(dt, val~var, value.var='val'), on='val']
#   var val  a  b
#1:   a   1  1 NA
#2:   b   2 NA  2

或者就像在注释中提到的那样,对于以前的版本,要么合并,要么设置键列,然后加入。

merge(dt, dcast.data.table(dt, val~var, value.var='val'))
 类似资料:
  • 本文向大家介绍如何基于R中的data.table的组列创建随机样本?,包括了如何基于R中的data.table的组列创建随机样本?的使用技巧和注意事项,需要的朋友参考一下 随机抽样有助于我们减少分析中的偏差。如果我们有分组数据,那么我们可能想根据分组找到随机样本。例如,如果我们有一个带有组变量的数据框,并且每个组包含十个值,那么我们可能想要创建一个随机样本,在该样本中,将从每个组中随机选择两个值。

  • 我有一个这样的数据集 我想创建列(visit_no)。每当间隙大于1时,我们需要在接下来的行中将visit_no值增加1,直到我们找到另一个值,它将保持不变 这是数据框架

  • 我需要取一个int数组并将其转换为BufferImage。我在这个问题上没有任何背景知识,我都是从互联网上学习的,所以下面是我要做的:从BufferedImage创建一个数组(完成),将这个数组转换为IntBuffer(完成)-(稍后我需要通过IntBuffer对图像执行一些操作),将IntBuffer中更改的值放入新数组(完成),并将这个数组转换为WritableRaster。(如果我对这个过程

  • 我试图从一个范围创建一个列表,但当我将它粘贴到另一个列表中时,我得到的是一个类,而不是我期望的列表- 代码: 这输出<代码>范围(0,3),

  • 恕我直言,我是一名未经培训、仅录制宏的VBA用户。我试着到处捡零碎的东西,但我还是个十足的傻瓜。请给我指出正确的方向! 在每一行上,零件编号(E列)应与源和地址(G和H列)以及描述(I列)相关联。我说“应该”,但实际上,不是每个零件编号一个源/地址组合,在许多文件中,在某些行上有多达15个不同的源/地址组合,源/地址组合列在相邻的列J/K、L/M、N/O等中,这将描述列推向右侧。 我需要找到一种V

  • 我有一个关于根据另一个数据表中的信息向数据表中添加列的问题 我的数据是这样的: 数据表 1(足球比赛) 数据表2(足球队收到的卡片): 现在,如果我想基于另一列添加一列,我将在datatable中使用以下函数: 但现在有两个变量需要匹配。球队代码和赛季。这是如何工作的?