2014-10-06 5 views
0

재현 가능한 예제로 내 질문을 게시하고 있습니다. 문제 : 샤이닝을 사용할 때 다른 요인 (담배 사용, 성별 등)에 따른 평균 수축기 혈압을보고 할 수 없습니다. RStudio에서 적절한 출력을 생성 할 수는 있지만 Shiny를 사용할 때는 요소 레벨별로 특정 값을보고하는 기능을 사용할 수 없습니다.ddply, 반짝이 고 잘못된 요약 출력

R에서 작동하는 코드의 예 :

a<- runif(99, 0, 5) 
b <- rep(c("A", "B", "C"), 33) 
df2<- data.frame(numVar =a, factVar=b) 
res<- ddply(df2, .(factVar), summarize, 
     mean = round(mean(numVar), 2), 
     sd = round(sd(numVar), 2)) 

내 빛나는 응용 프로그램을 사용하려면, 사용자는 먼저 .csv 파일을 업로드합니다. 그런 다음 파일을 숫자 및 요인 변수로 나눕니다. 변수는 각각 passdfnum 및 passdffact라는 반응 형 데이터 프레임에 저장됩니다. 사용자가 히스토그램 탭에 있으면 수치 변수 (입력 $ histVar)와 요인 변수 (입력 $ histDensityVarFactor)를 선택합니다. 그럼이 코드를 사용하는 경우에만 선택한 필드로 구성 subsetData 기능에 임시 dataframe의 dataM을 만듭니다

subsetData <- reactive({ 

    if(input$histDensityVarFactor!= "None"){ 
    dataM <- data.frame(numVar=passdfnum()[input$histVar], factVar=passdffact()[input$histDensityVarFactor]) 

    } 
    }) 

이것은 row.names, 입력 $의 histVar 및 입력 $의 histDensityVarFactor와 dataframe를 생성합니다. * 참고 :이 데이터 프레임의 구조는 예제의 데이터 프레임과 동일합니다. *

ggplot2에서 데이터 그래프를 만듭니다. 그런 다음 요인 수준에 따른 숫자 변수 요약 표를 작성하면 모든 것이 다 지겨집니다.

내가 빛나는에서 사용하고있는 코드는 이것이다 : 주 : 요인 변수가 예/아니오 또는 높음/중간으로 코딩/저 어떤 결과 것은 다음과 같습니다 출력은

output$histMeans<-renderPrint({ 
if(input$histDensityVarFactor!= "None"){ 

numVar<-noquote(names(passdfnum()[input$histVar])) 
factVar<-noquote(names(passdffact()[input$histDensityVarFactor])) 

    res<- ddply(dataM, .(dataM[[factVar]]), here(summarize), 
    mean = round(mean(dataM[[input$histVar]]), 2), 
    sd = round(sd(dataM[[numVar]]), 2)) 
res }}) 

dataM[[factVar]] mean sd 
1    No 127.55 15.31 
2    Yes 127.55 15.31 

흥미로운 참고 :

,691,363 : 나는 이와 같이 input$histDensityVarFactor 대신 .(dataM[[factVar]])으로 사용하는 경우 나는 요인의 수준에 의해 내 수치 변수의 평균과 SD를 얻는 방법 :

tobacco mean sd 
1  No 127.55 15.31 
2  Yes 127.55 15.31 

내 질문은 간단하다 : (210)

res<- ddply(dataM, input$histDensityVarFactor, here(summarize), 
    mean = round(mean(dataM[[input$histVar]]), 2), 
    sd = round(sd(dataM[[numVar]]), 2)) 
res 
나는이 출력을 얻을? 보고 된 평균과 sd는 전체 표본의 평균과 sd입니다.

도움을 주시면 감사하겠습니다. 미리 감사드립니다. Best, Nathan

+0

'summarize()'를 사용하는 대신 손으로 데이터 프레임을 구성하는 것이 좋습니다. 그러면 반짝이는 입력에서 변수 이름으로 이동하는 것이 더 쉬울 것입니다. – hadley

+0

감사합니다. 대답에 넣을 코드를 사용하여 작업 할 수있었습니다. – nate

답변

0
tmp <- aggregate(dataM[[numVar]]~dataM[[factVar]], dataM, FUN=function(x) { c(n=noquote(sprintf("%.0f",length(x))), mean=noquote(sprintf("%.4f", mean(x))), sd=noquote(sprintf("%.4f", sd(x))), se=noquote(sprintf("%.4f", (sd(x)/length(x)))))}) 
    tmp<- cbind(tmp[1][1], tmp[2][,1]) 
    names(tmp) <- c(noquote(input$histDensityVarFactor), "N", "Mean", "SD", "SE")