2016-12-01 2 views
0

큰 데이터 세트가 있고 다른 열의 행 수를 기준으로 Main 열의 표준 편차를 구해야합니다. 여기서 샘플 데이터 세트이다 예로서R 조건부 표준 편차

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&Dsd(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) 

내 데이터 세트가 더 많은 열을 가지고 있으며,이 경우 내가 궁금하네요 더 효율적인 방법으로 처리 할 수 ​​있습니까? 많은 감사합니다!

답변

1

시도에서 colSds 이것을 얻을 수 있습니다 :

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

#   B   C   D 
# 0.06363961 0.04582576 0.12093387 
0
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 
+0

을 T-T @가 귀하의 질문에 대답합니까? http://stackoverflow.com/help/someone-answers 소식을받는 마음 –

0

우리는 matrixStats

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