gpt4 book ai didi

r - 如何创建均值和标准差data.table中的列

转载 作者:行者123 更新时间:2023-12-04 13:07:06 24 4
gpt4 key购买 nike

下面的代码/结果使我感到困惑,为什么data.table对于均值函数而不是sd函数返回NA。

library(data.table)
test <- data.frame('id'=c(1,2,3,4,5),
'A'=seq(2,9,length=5),
'B'=seq(3,9,length=5),
'C'=seq(4,9,length=5),
'D'=seq(5,9,length=5))

test <- as.data.table(test)

test[,`:=`(mean_test = mean(.SD), sd_test = sd(.SD)),by=id,.SDcols=c('A','B','C','D')]
> test
id A B C D mean_test sd_test
1: 1 2.00 3.0 4.00 5 NA 1.2909944
2: 2 3.75 4.5 5.25 6 NA 0.9682458
3: 3 5.50 6.0 6.50 7 NA 0.6454972
4: 4 7.25 7.5 7.75 8 NA 0.3227486
5: 5 9.00 9.0 9.00 9 NA 0.0000000

通过DT教程/示例,我已经学习了很多内容。 This问题与我希望做的事情非常相似。

为什么标准偏差函数起作用,而平均值函数返回NA?

编辑:使用Ricardo Saporta的解决方案:
test[,`:=`(mean_test = apply(.SD, 1, mean), sd_test = apply(.SD, 1, sd),by=id,.SDcols=c('A','B','C','D')]

> test
id A B C D mean_test sd_test
1: 1 2.00 3.0 4.00 5 3.500 1.2909944
2: 2 3.75 4.5 5.25 6 4.875 0.9682458
3: 3 5.50 6.0 6.50 7 6.250 0.6454972
4: 4 7.25 7.5 7.75 8 7.625 0.3227486
5: 5 9.00 9.0 9.00 9 9.000 0.0000000

最佳答案

.SD本身就是data.table因此,当您使用mean(.SD)时,您(正在尝试)采用整个data.table的均值。

函数mean()不知道如何处理data.table并返回NA
看一看

## the .SD in your question is the same as 
test[, c('A','B','C','D')]

## try taking its mean
mean(test[, c('A','B','C','D')])

# Warning in mean.default(test[, c("A", "B", "C", "D")]) :
# argument is not numeric or logical: returning NA
# [1] NA

试试这个代替

使用 lapply(.SD, mean)逐列
apply(.SD, 1, mean)逐行

关于r - 如何创建均值和标准差data.table中的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25535573/

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