簡體   English   中英

R條件標准差

[英]R Conditional standard deviation

我有一個很大的數據集,我需要根據其他列中的行數來獲取Main列的標准差。 這是一個示例數據集:

df1 <- data.frame(
  Main = c(0.33, 0.57, 0.60, 0.51), 
  B = c(NA, NA, 0.09,0.19), 
  C = c(NA, 0.05, 0.07, 0.05), 
  D = c(0.23, 0.26, 0.23, 0.26)
)

View(df1)
#   Main    B       C       D  
# 1 0.33    NA      NA      0.23
# 2 0.57    NA      0.05    0.26
# 3 0.60    0.09    0.07    0.23
# 4 0.51    0.19    0.05    0.26

B列為例,由於行1&2為NA ,其標准偏差為sd(df1[3:4,1]) C&D列將為sd(df1[2:4,1])sd(df1[1:4,1]) 因此,結果將是:

#     B       C       D  
# 1   0.06    0.05    0.12

我做了以下操作,但只返回了一個數字0.0636

df2 <- df1[,-1]!=0

sd(df1[df2,1], na.rm = T)

我的數據集有更多列,我想知道是否有更有效的方法來完成它? 非常感謝!

嘗試:

sapply(df1[,-1], function(x) sd(df1[!is.na(x), 1]))

#          B          C          D 
# 0.06363961 0.04582576 0.12093387 
x <- colnames(df) # list all columns you want to calculate sd of 
value <- sapply(1:length(x) , function(i) sd(df[,x[i],drop=TRUE], na.rm = T))
names(value) <- x

#          Main          B          C          D 
#    0.12093387 0.07071068 0.01154701 0.01732051

我們可以從matrixStatscolSds獲得

library(matrixStats)
colSds(`dim<-`(df1[,1][NA^is.na(df1[-1])*row(df1[-1])], dim(df1[,-1])), na.rm = TRUE)
#[1] 0.06363961 0.04582576 0.12093387

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM