gpt4 book ai didi

r - 在data.table或dplyr中的列之间进行计算?

转载 作者:行者123 更新时间:2023-12-04 05:06:59 25 4
gpt4 key购买 nike

我想使用data.table为大型数据集实现非常简单的任务。

计算每个ID的val1和val2的平均值。

有关详细信息,请参阅随附的伪造数据。

library(data.table)
DT <- data.table(ID = paste0("ID",rep(1:5,each=2)),
level= rep(c("CTRL","CTRL","ID1","ID2","ID3"),2),
val1 = 1:10,
val2 = rnorm(10))

在这里,我想为每个ID计算val1和val2的平均值。

另请注意,每个ID中都有不同的级别。但是对于每个唯一的ID,我只想一个包含不同级别val1和val2的均值。

--- ID |吝啬的 - -

-ID1 | ...

-ID2 | ...

-ID3 | ...

我尝试了以下代码,但是它不起作用。
topagents <- DT[, mean = mean(list(val1,val2)), 
by = ID]

但这是行不通的。
我知道如何在 reshape2中进行操作,首先是 melt,然后是 dcast

但是原始数据集相对较大,具有2000万行和12个字段,因此计算需要花费很长时间。

所以我更喜欢使用 data.tabledplyr

最佳答案

如果我理解正确,则您有十二个字段,并希望将硬编码保持在最低限度。我不太确定您的预期输出是什么,但希望它是以下两个结果之一-

colstomean <- setdiff(colnames(DT),c('ID','level'))

选项1,该ID中每个变量值的平均值
DT[, lapply(.SD, mean, na.rm=TRUE), 
by=ID,
.SDcols = colstomean
]

输出 -
    ID val1        val2
1: ID1 1.5 0.37648090
2: ID2 3.5 -0.55484848
3: ID3 5.5 -0.07326365
4: ID4 7.5 -0.37705525
5: ID5 9.5 -0.08075406

选项2,该ID中所有变量值的平均值
DT[, mean(unlist(.SD), na.rm = TRUE), 
by=ID,
.SDcols = colstomean
]

输出
    ID        V1
1: ID1 0.9382404
2: ID2 1.4725758
3: ID3 2.7133682
4: ID4 3.5614724
5: ID5 4.7096230

关于r - 在data.table或dplyr中的列之间进行计算?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21129134/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com