添加每行具有中值绝对偏差 (MAD) 的列

Add column with median absolute deviations (MADs) per row

我有以下data.frame。我想在左侧添加一列,列出每行的中值绝对偏差 (MAD)(我使用的是 stats 包)。我已经阅读了使用 rowMeans 函数的帖子,但我不能在这里将其用于 MAD。希望有人能帮帮我。

 library(stats)
 df <- as.data.frame(matrix(ncol=7, nrow=3, 
    c(3,6,NA,4,5,NA,7,6,2,7,10.4,8,9,NA,3.7,4,6,0.4,NA,7,2.9), byrow = TRUE))

我们可以遍历 applyMARGIN = 1 的行并应用 mad

df$MAD <- apply(df, 1, mad, na.rm = TRUE)
df$MAD
#[1] 1.48260 2.22390 2.29803

matrixStats中,有rowMads

library(matrixStats)
rowMads(as.matrix(df), na.rm = TRUE)
#[1] 1.48260 2.22390 2.29803

我们可以在 base R 中编写自己的函数来计算中值绝对偏差 (MAD)。

my_mad <- function(x, constant = 1.4826) {
    median(abs(x - median(x, na.rm = TRUE)), na.rm = TRUE) * constant
}

apply(df, 1, my_mad) 
#[1] 1.48 2.22 2.30