2016-06-16 2 views
0

저는 R의 초보자입니다. 여러 열이있는 데이터 프레임을 사용하고 있는데, 여기에서 열 1의 가장 높은 분산 또는 표준 편차를 계산하려고합니다. 예를 들어 데이터 세트가 아래처럼 보이는 경우 학교 A, 학교 B 및 학교 C에 대해 가장 높은 표준 편차를 계산하려고합니다.가장 높은 표준 편차/다른 열의 항목을 기반으로하는 열의 분산

School City Percent 
A  X  92 
B  Y  80 
C  Z  95 
A  X  89 
B  Y  75 
+0

? 또한 해당 데이터 세트의 "열 1"의 분산을 묻는 것은 난센스입니다. –

+0

실제 데이터 세트가 큽니다. 이것은 나의 질문을 설명하기위한 예일뿐입니다. – beginner1

+0

이러한 답변 중 하나가 문제를 해결하는 데 도움이되면 답변 옆에있는 녹색 확인란을 선택하여 문제를 해결하십시오. – Rilcon42

답변

1

이 별도로

베이스 R에서
df<-data.frame(school=c("A","B","C","A","B"),percent=c(92,80,95,89,75)) 

library(dplyr) 
result<-split(df,df$school)%>%lapply(.,function(x)sd(x$percent))%>%unlist(.)%>%as.data.frame(.) 
res<-cbind(row.names(result),result) 
colnames(res)<-c("school","std_dev") 
res 


#output 
> res 
    school std_dev 
A  A 2.121320 
B  B 3.535534 
C  C  NA 
1

함수 ave()로부터 유도 된 양의 열을 추가하기 위해 사용될 수있는 표준 각 학교 편차 (A, B, C)를 계산한다 다른 열은 data.frame의 다른 그룹에 따라 다릅니다. 여기

은 예이다 :

df1$var <- with(df1, ave(Percent, School, FUN=var)) 
df1$sd <- with(df1, ave(Percent, School, FUN=sd)) 
> df1 
# School City Percent var  sd 
#1  A X  92 4.5 2.121320 
#2  B Y  80 12.5 3.535534 
#3  C Z  95 NA  NA 
#4  A X  89 4.5 2.121320 
#5  B Y  75 12.5 3.535534 

which.max()를 사용하여 추출 될 수있는 가장 큰 값을 갖는 항목 :

df1[which.max(df1$var),] 
# School City Percent var  sd 
#2  B Y  80 12.5 3.535534 

다른 기지국의 R 옵션 aggregate()을 사용하는 것이다. 이것은 더 컴팩트 한 형태로 결과를 나타냅니다 :

df2 <- setNames(aggregate(Percent~School, df1, var), c("School", "Percent.var")) 
> df2 
# School Percent.var 
#1  A   4.5 
#2  B  12.5 
#3  C   NA 

df2 <- setNames(aggregate(Percent~School, df1, sd), c("School", "Percent.sd")) 
> df2 
# School Percent.sd 
#1  A 2.121320 
#2  B 3.535534 
#3  C   NA 

또는

, 결합 모두 aggregate 작업 : 이러한 경우

df2 <- setNames(do.call(data.frame, 
       aggregate(Percent~School, df1, function(x) c(var(x),sd(x)))), 
       c("School","Percent.var","Percent.sd")) 
# School Percent.var Percent.sd 
#1  A   4.5 2.121320 
#2  B  12.5 3.535534 
#3  C   NA   NA 

을, 너무, 최대 값 수 which.max() :

df2[which.max(df2$Percent.sd),] 
# School Percent.var Percent.sd 
#2  B  12.5 3.535534 
을 사용하여 출력에서 ​​추출 할 수 있습니다. 이 예에서 사용개

데이터 : 우리는 하나 또는 두 개의 인스턴스가 학교에 대한 분산을 계산 해야하는 방법

df1 <- structure(list(School = structure(c(1L, 2L, 3L, 1L, 2L), 
       .Label = c("A", "B", "C"), class = "factor"), 
       City = structure(c(1L, 2L, 3L, 1L, 2L), 
       .Label = c("X", "Y", "Z"), class = "factor"), 
       Percent = c(92L, 80L, 95L, 89L, 75L)), 
       .Names = c("School", "City", "Percent"), 
       class = "data.frame", row.names = c(NA, -5L)) 
관련 문제