Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/83.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,我有以下数据表: id user V1 V2 V3 V4 1: 1 1 1 1 1 0 2: 1 2 4 1 3 1 3: 1 3 0 1 6 0 4: 2 1 1 0 2 1 5: 2 2 2 1 0 0 我执行了一个Lappy group by id计算: my_data[,lapply(.SD,mean)*.SD,by=id,.SDcols=3:5] 结果如下: id V1 V2

我有以下数据表:

   id user V1 V2 V3 V4
1:  1    1  1  1  1  0
2:  1    2  4  1  3  1
3:  1    3  0  1  6  0
4:  2    1  1  0  2  1
5:  2    2  2  1  0  0
我执行了一个Lappy group by id计算:

my_data[,lapply(.SD,mean)*.SD,by=id,.SDcols=3:5] 
结果如下:

    id    V1    V2      V3
1:  1 1.666667 1.0  3.333333
2:  1 6.666667 1.0 10.000000
3:  1 0.000000 1.0 20.000000
4:  2 1.500000 0.0  2.000000
5:  2 3.000000 0.5  0.000000
是否有一种简单的数据表方法可以从原始数据表中包含列用户? 我已经设法做到了

cbind(my_data[,.(user)], my_data[,lapply(.SD,mean)*.SD,by=id,.SDcols=3:5])

但我真的希望有更好的方法来完成作业

my_data[,(3:5) := lapply(.SD,mean)*.SD,by=id,.SDcols=3:5] 
或者,我们不是在循环本身中乘以
.SD

my_data[, (3:5) := lapply(.SD, function(x) mean(x)*x), .SDcols = 3:5, by = id]

我建议你通过考试。data.table vignette的介绍解释了一个重要的观点,我将在这里重复

只要
j
返回一个列表,列表中的每个元素都将成为结果data.table中的一列

在base R中,
c(list,list)
返回一个包含所有元素的新列表。我们只需使用现有功能即可:

require(data.table) # v1.9.7 devel
dt[, c(list(user=user), lapply(.SD, function(x) x*mean(x))), by=id, .SDcols=V1:V4]

我现在使用的是具有某些新功能的,例如,在
中使用
V1:V4
。SDcols

确实有效谢谢!但是我想让选项1不更改原始数据集,选项2只添加一些列,而不是全部列them@George91当您正在寻找一种有效的方法时,您可能可以复制数据,即
my_data1,因此据我所知,这将在v1.9.7中起作用?因为我尝试了我的_数据[,c(list(user=user),lapply(.SD,function(x)x*mean(x))),by=id,.SDcols=3:6],我得到了一个错误“object user not found”。抱歉,如果我理解错了,你是对的。当提供
.SDcols
时,以前无法提供其他变量。。这是最近在v1.9.7中修复的。它很快就会以v1.9.8(奇数=devel,偶数=稳定)的形式出现在CRAN上。。但与devel合作应该没问题。有关安装说明,请参阅主页。