2017-05-20 4 views
2

나는 기본적인 작업이라고 생각했지만 그렇지 않은 것으로 입증되었습니다. 각 설문 조사마다 빈도 테이블로 변환해야하는 일련의 설문 조사가 있습니다. 예를 들어, 설문 조사 1은 6 가지 질문으로 구성되며 참가자는 5 가지 응답 옵션을가집니다. 각 설문 조사마다 질문 당 응답 옵션이있는 참가자의 비율과 함께 각 질문 (이 예에서는 6)을 가진 테이블을 생성해야합니다.R 리 커트 데이터의 빈도 테이블

prop.table을 사용했지만 한 번에 하나의 질문에 대해서만 수행 할 수 있었고 백분율 기호를 추가하는 방법을 찾지 못했고 행의 질문 변수 제목을 잃어 버렸습니다 이름.

전반적으로이 테이블을 워드 문서로 바로 인쇄하고 싶습니다. 그 부분은 내가 생각한 것 같지만 지금은 테이블을 찾아야합니다.

나는 모든 제안을 환영합니다. 감사!

편집

죄송합니다, 처음으로 포스터! 다음은 지금까지 샘플 리 커트 데이터를 사용하여 얻은 것입니다.

q1<-c(2,2,3,3,3,4,4,4,5,5) 
q2<-c(2,3,3,4,4,4,4,5,5,5) 
q3<-c(2,2,2,3,4,4,4,5,5,5) 
df<-data.frame(q1,q2,q3) 
x<-prop.table(table(factor(df$q1,levels=1:5)))*100 
y<-round(x,digits=1)` 

결과는 내가 필요한 것과 비슷합니다. 그러나 "q1"을 결과 테이블에 행 이름으로 넣으려면 퍼센트 기호에 % 기호를 넣고 싶습니다. 두 개의 추가 "q2" "q3"행을 같은 것으로 통합 할 방법이 필요합니다. 표.

희망이 있습니다. 고맙습니다.

+1

예를 들어 데이터와 당신이 시도한 몇 가지 코드를 입력하십시오. Word 문서에서 테이블 생성은 RMarkdown을 사용하여 수행 할 수 있습니다. – Marius

+0

고마워요, 제발 내 편집을 참조하십시오. – Drew

+0

유용 할 수 있습니다. http://www.statmethods.net/stats/frequencies.html – Phil

답변

0

데이터가 어떤 모양인지 모른 채 정확하게 대답하기는 어렵습니다. 그러나 이미 데이터 프레임이 있다고 가정하면 데이터를 체계적으로 플롯으로 변환하는 함수를 만드는 것으로 시작합니다. 기본 R 그래픽보다 ggplot2를 사용하는 편이 더 유연합니다.


각 설문 조사에 대한 데이터 프레임이 있다고 가정 해 보겠습니다. 내 경험에 비추어 볼 때 질문을 나타내는 열이 하나 있고 해당 질문에 주어진 응답이있는 열이있을 수 있습니다.

즉 :

survey = data.frame(question = factor(rep(1:6,4)),response = factor(c(1:5,sample(1:5,19, replace = TRUE)))) 

이 그럼 당신은 그럼 당신이 만드는 기능을 만들 수 있습니다

library(plyr) 

# Assumes survey has columns question and response 
calculate_percent = function(survey){ 
    ddply(survey, ~question, function(rows){ 

    total_responses = nrow(rows) 

    response_percent = ddply(rows, ~response, function(rows_response){ 
    count_response = nrow(rows_response) 
    data.frame(response = unique(rows_response$response), percent = (count_response/total_responses)*100) 
    }) 

    data.frame(question = unique(rows$question), response_percent) 

    }) 
} 

위의 데이터 프레임 주어진 질문에 각 응답 비율을 계산하는 함수를 만들 수 있습니다 위에 정의 된 것과 같은 데이터 프레임이 주어진 그림. 당신은 당신이 체계적으로 위와 유사한 방식으로 데이터를 처리 할 추가 기능을 일반화 할 수있는 여러 설문 조사이 있기 때문에 결국 그런 다음 호출

percentage_plot(survey) 

사용할 수 있습니다

library(ggplot2) 
library(scales) 

percentage_plot = function(survey){ 

    calculated_percentages = calculate_percent(survey) 

    ggplot(calculated_percentages,aes(x = question, y = percent)) + 
    geom_bar(aes(fill = response),stat = "identity",position = "dodge") + 
    scale_y_continuous(labels = percent) 
} 

.

또한 그룹화 된 상자 플롯이 아닌 패싯에서 위의 플롯을 수행 할 수 있습니다. 그러나 하나 이상의 설문 ​​조사가 있기 때문에 아마도 그 수준에서 패싯을 사용하고 싶을 것입니다.


참고 : 내가 잘하면 여전히 사용 사례에 사용자 정의 할 수 있습니다, 당신의 편집하기 전에 내 예를 쓰기 시작

ggplot percentage

ggplot grouped bar plot


죄송합니다.

실제로 나는 귀하의 질문에 대해 오해하고 다른 답변을 한 것 같습니다.

0

나는 here을 제안 코드의

for (i in seq_along(names(df))) { 
assign(paste0("x",i), prop.table(table(factor(df[[i]], levels = 1:5)))) 
} 

result <- rbind(x1, x2, x3) 
rownames(result) <- names(df) 

as.data.frame(matrix(
sprintf("%.0f%%", result*100), 
nrow(result), 
dimnames = dimnames(result) 
)) 

    1 2 3 4 5 
q1 0% 20% 30% 30% 20% 
q2 0% 10% 20% 40% 30% 
q3 0% 30% 10% 30% 30% 

마지막 비트입니다 ... 질문으로 정확히 그것을 가지고 나중에 논쟁에 유용하지 않기 때문에 당신이이 일을 조언하지만, 순서대로하지 않을 것입니다. 당신이 knitr를 사용하는 경우

1
q1<-c(2,2,3,3,3,4,4,4,5,5) 
q2<-c(2,3,3,4,4,4,4,5,5,5) 
q3<-c(2,2,2,3,4,4,4,5,5,5) 
df<-data.frame(q1,q2,q3) 

library(expss) 
# add value lables for preserving empty categories 
val_lab(df) = autonum(1:5) 
res = df 
for(each in colnames(df)){ 
    res = res %>% 
     tab_cells(list(each)) %>% 
     tab_cols(vars(each)) %>% 
     tab_stat_rpct(total_row_position = "none") 
} 


res = res %>% tab_pivot() 
# add percentage sign 
recode(res[,-1]) = other ~ function(x) ifelse(is.na(x), NA, paste0(round(x, 0), "%")) 
res 

# | | 1 | 2 | 3 | 4 | 5 | 
# | -- | -- | --- | --- | --- | --- | 
# | q1 | | 20% | 30% | 30% | 20% | 
# | q2 | | 10% | 20% | 40% | 30% | 
# | q3 | | 30% | 10% | 30% | 30% | 

다음 코드가 도움이 될 것입니다 :

library(knitr) 
res %>% kable 
+0

이것은 나쁘지는 않지만 질문에 관측치가 포함되지 않았더라도 축척 점 '1'을 포함 할 수있는 방법입니다 ? – Phil

+0

@ 필 예. 관측치없이 값을 포함 시키려면 비늘에 값 레이블을 추가해야합니다. 게시물 업데이트를 참조하십시오. –

관련 문제