2017-05-20 6 views
2

私は基本的な仕事だと思っていましたが、それ以外は証明されています。各調査の頻度表に変換するために必要な一連の調査があります。たとえば、調査1は6つの質問で構成され、参加者は5つの回答オプションを持っていました。各調査では、各質問(この例では6)と、質問ごとの回答オプションごとに回答した参加者の割合を示す表を作成する必要があります。Rリカーートデータの頻度表

私はprop.tableを使用していましたが、一度に1つの質問に対してしか実行できませんでしたが、パーセント記号を追加する方法がわかりませんでした。名。

全体的に言えば、これらのテーブルをワードドキュメントに直接印刷したいと思います。その部分は私が考え出したと思うが、今ではテーブルを理解する必要がある。

私は何か提案を歓迎します。ありがとう!

EDIT

申し訳ありませんが、初めてのポスター!これまでにリッカートのサンプルデータを使用しています。

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"を結果の表に行の名前として表示したいのですが、パーセンテージに%記号があるようにしたいのですが、2つの追加の "q2" "q3"行を同じものに組み込む方法が必要です表。

希望に役立ちます。ありがとうございました。

+1

例のデータとあなたが試したいくつかのコードを入力してください。ワード文書のテーブルの生成は、RMarkdownを使用して行うことができます。 – Marius

+0

ありがとう、私の編集を参照してください。 – Drew

+0

これは役に立つかもしれません:http://www.statmethods.net/stats/frequencies.html – Phil

答えて

0

データがどのように見えるのかわからなくても正確な答えを出すのは難しいです。しかし、すでにある種のデータフレームがあると仮定すると、データを系統的にプロットに変換する関数を作成することから始めます。もっと柔軟なので、ベースのRグラフィックではなくggplot2も使用します。


調査ごとにデータフレームがあるとします。私の経験から、あなたは質問を示す1つの列とその質問に対する与えられた応答を持つ行を持つことができます。

です:

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

@ Philはい。観測値を含まない値を含めるには、値ラベルをスケールに追加する必要があります。投稿への更新を参照してください。 –

関連する問題