假设我有以下数据
dt <- data.table(var = c("a", "b"), val = c(1, 2))
现在我想向dt
添加两个新列,分别命名为a
和b
,具有各自的值(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]
}
基于所展示的示例,我们可以使用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中使用以下函数: 但现在有两个变量需要匹配。球队代码和赛季。这是如何工作的?