Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 如何在data.table中按组增量创建新列?_R_Data.table - Fatal编程技术网

R 如何在data.table中按组增量创建新列?

R 如何在data.table中按组增量创建新列?,r,data.table,R,Data.table,对于每个data.table的组,我有不同的向量,如下面的new.column.for.*,我想在data.table的新列中使用它们。 是否有一种紧凑的data.table方法来实现这一点? 合并似乎相当麻烦。创建新向量(比如new.column.d我不明白DT$d有什么问题,我想在与new.column.for.b不同的时间点插入new.column.for.a。我不想为DT$d创建一个大的向量,因为它消耗内存。如果你的数据看起来真的像你的例子,那么唯一的“data.table ish”我能

对于每个data.table的组,我有不同的向量,如下面的
new.column.for.*
,我想在data.table的新列中使用它们。 是否有一种紧凑的
data.table
方法来实现这一点?
合并似乎相当麻烦。创建新向量(比如
new.column.d我不明白
DT$d有什么问题,我想在与
new.column.for.b
不同的时间点插入
new.column.for.a
。我不想为
DT$d
创建一个大的向量,因为它消耗内存。如果你的数据看起来真的像你的例子,那么唯一的“data.table ish”我能想到的改进是,在事实之后添加列到预先存在的表中,可以预先分配列(类似于
DT[,d:=NA\u character\uz]
),然后插入您想要插入的任何内容,例如
DT[1:4,d:='a'][11:17,d:='b']
。(事实上,您可以跳过预分配步骤,因为仅在某些行上定义列也会在其他行中填充相同类型的
NA
,但我显示了该步骤,因为它有时很有用。)这就是您的意思吗?如果不是,您能否提供一点更详细的信息…@Philip也许我们已经接近了。能否
'a'
DT[1:4,d:='a']
是否在
DT
之外?如果类似
DT[key.1=='a',d]是,但不使用

library(data.table)
DT <- data.table(key.1 = rep(c('a','b','c'), each = 10), 
                 key.2 = rep(1:10, 3) , 
                     c = 1:30)
new.column.for.a <- c(paste0('a', 1:4), rep(NA, 6))
new.column.for.b <- c(paste0('b', 1:7), rep(NA, 3))

Desired.T <- data.table(key.1 = rep(c('a','b','c'), each = 10), 
                        key.2 = rep(1:10, 3) , 
                            c = 1:30, 
                            d = c(new.column.for.a, 
                                new.column.for.b, rep(NA, 10))
                        )