【问题标题】:How to calculate deviations from weighted mean in data.table?如何计算与 data.table 中加权平均值的偏差?
【发布时间】:2016-03-13 09:57:33
【问题描述】:

我想计算data.table 中许多变量与(加权)均值的偏差。

让我们来看看这个例子集:

mydt <- data.table(
    id = c(1, 2, 2, 3, 3, 3),
    x = 1:6,
    y = 6:1,
    w = rep(1:2, 3)
)

mydt
   id x y w
1:  1 1 6 1
2:  2 2 5 2
3:  2 3 4 1
4:  3 4 3 2
5:  3 5 2 1
6:  3 6 1 2

我可以计算xy的加权均值如下:

mydt[
    ,
    lapply(
        as.list(.SD)[c("x", "y")], 
        weighted.mean, w = w
    ),
    by = id
]

(由于this 的错误,我使用了相对复杂的as.list(.SD)[...] 构造而不是.SDcols。)

我尝试先为每一行创建方法,但没有找到如何将:=lapply() 结合起来。

【问题讨论】:

    标签: r data.table


    【解决方案1】:

    稍微调整加权平均计算:

    mydt[
        ,
        lapply(
            .SD[, .(x, y)], 
            function(var) var - weighted.mean(var, w = w)
        ),
        by = id
    ]
    
       id       x       y
    1:  1  0.0000  0.0000
    2:  2 -0.3333  0.3333
    3:  2  0.6667 -0.6667
    4:  3 -1.0000  1.0000
    5:  3  0.0000  0.0000
    6:  3  1.0000 -1.0000
    

    通过建议的@DavidArenburg 符号简化来更新解决方案。

    【讨论】:

    • @DavidArenburg 谢谢。它确实更简单,但也丢失了原始变量名称,你得到 V1V2 而不是 xy
    • 那么.SD[, .(x, y)] ?
    • 为了便于编程使用,您始终可以提供要保留的列名称的字符向量:.SD[, c("x","y"), with=FALSE]
    猜你喜欢
    • 1970-01-01
    • 2012-04-20
    • 2018-03-10
    • 2010-10-04
    • 1970-01-01
    • 2020-05-13
    • 2015-03-04
    • 2012-06-14
    • 1970-01-01
    相关资源
    最近更新 更多