r - 计算分组意味着忽略每一行值

标签 r mean

我使用以下代码来计算每个类的分组平均值。我需要每个类的平均值,将其放在每一行中,但忽略公式中每一行的值(参见 expected_mean 列)。虽然该 DT 方法确实计算平均值,但它不会忽略每一行(请参阅列 value_mean)。

## create dataset
dataset <- data.frame(matrix(ncol = 2, nrow = 6))
colnames(dataset) <- c('class','value')
dataset$class <- c(rep('A',3),rep('B',3))
dataset$value <- 1:6

## convert to DT and aggregate
setDT(dataset)
dataset[, value_mean := mean(value), by=class]

## expected means (without itself)
dataset$expected_means <- c(2.5,2,1.5,5.5,5,4.5)

这会返回:

   class value value_mean expected_means
       A     1          2            2.5
       A     2          2            2.0
       A     3          2            1.5
       B     4          5            5.5
       B     5          5            5.0
       B     6          5            4.5

我需要计算每个类的平均值,将它放在每行中,但同时忽略当前值。例如,对于第一行,而不是 (1+2+3)/3 , 它应该只做 (2+3)/2

最佳答案

肯定有比sapply更有效的方法,但你可以这样做:

setDT(dataset)[, value_mean := sapply(1:.N, function(x) mean(value[-x])), by = class]

输出:

   class value expected_means value_mean
1:     A     1            2.5        2.5
2:     A     2            2.0        2.0
3:     A     3            1.5        1.5
4:     B     4            5.5        5.5
5:     B     5            5.0        5.0
6:     B     6            4.5        4.5

关于r - 计算分组意味着忽略每一行值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61326266/

相关文章:

r - 如何根据 R 中的概率密度计算自定义连续分布的平均值(期望值)

r- hist.default, 'x' 必须是数字

python - Python 和 Matlab 中平均频率的差异

node.js - 按 MEAN 中的 ID 显示图像

python - 在列表中查找平均值,并在 Python 中返回结果分数超过平均值

python - 如何从 python 中的 numpy 二维矩阵中删除行?

r - dplyr:在group_by和summary之后安排不按预期行为

r - 如何将一列拆分为三个不同的列,然后从结果两列中获取平均值 (R)

r - 如何在 R 中安装软件包 keras

r - 以多种颜色绘制列表列表中的元素