Хорошая, но простая текстовая таблица для данных масштаба Ликерта в R - PullRequest
0 голосов
/ 04 мая 2018

У меня есть данные шкалы Ликерта. Я хочу показать их в удобном (для не-R-пользователей) способе чтения. Важно то, что на консоли должно быть обычный текст . Никакой графики или чего-либо подобного пакетному предложению likert. Это не обязательно должен быть table(), но он должен выглядеть как таблица - независимо от того, какая магическая конструкция R стоит за ним.

Эта таблица только для первого просмотра, когда начинается изучение набора данных.

Это пример данных

> set.seed(0)
> lik <- sample(c(0:3, NA), 150, replace=TRUE)
> lik <- factor(lik, levels=0:3, labels=c('no', 'maybe no', 'maybe yes', 'yes'))
> tn <- table(lik, useNA="always")
> tn
lik
       no  maybe no maybe yes       yes      <NA> 
       22        33        34        37        24 

Я "хороший" стол мог бы выглядеть следующим образом

  no maybe no maybe yes  yes <NA>
n 24       34        37   29   26
% 36       51      55.5 43.5   39

Обратите внимание, что 37 и 29 отображаются без цифр!

Если бы я использовал rbind(), здесь есть цифры. Смотрите что я пробовал пока

> tp <- sapply(tn, function(x) { sum(tn) / 100 * x })
> rbind(tn, tp)
   no maybe no maybe yes  yes <NA>
tn 22     33.0        34 37.0   24
tp 33     49.5        51 55.5   36

Проблема в том, как задать имена строк (например, tn - <<code>n) и как предотвратить печать чисел в первой строке цифрами.

Я полностью открыт для предложения о том, как можно легко и просто отображать данные likert (в смысле: для чтения не-R-пользователями, например, SPSS-пользователями) в текст .

1 Ответ

0 голосов
/ 04 мая 2018

Если я правильно понимаю ваш вопрос, я считаю, что вы можете использовать функцию kable из пакета knitr для решения вашей проблемы:

tab <- rbind(tn, tp)
rownames(tab) <- c("n", "%")
knitr::kable(tab, digits=0)

Это приводит к следующему выводу

|   | no| maybe no| maybe yes| yes| NA|
|:--|--:|--------:|---------:|---:|--:|
|n  | 22|       33|        34|  37| 24|
|%  | 33|       50|        51|  56| 36|

РЕДАКТИРОВАТЬ: извините, теперь я вижу, что вы хотите сохранить десятичные дроби во втором ряду. К сожалению, kable устанавливает цифры по столбцам, так что это вам не поможет. Вместо этого вы можете сделать следующее:

knitr::kable(t(tab))

в результате

|          |  n|    %|
|:---------|--:|----:|
|no        | 22| 33.0|
|maybe no  | 33| 49.5|
|maybe yes | 34| 51.0|
|yes       | 37| 55.5|
|NA        | 24| 36.0|

РЕДАКТИРОВАТЬ2: Ваши проценты, кажется, не составляют до 100%; Я не уверен, почему это так, но следующее даст проценты, которые в сумме составляют до 100%:

tab <- cbind(tn, tn / sum(tn) * 100)
colnames(tab) <- c("n", "%")
knitr::kable(tab, digits = c(0, 1))

|          |  n|    %|
|:---------|--:|----:|
|no        | 22| 14.7|
|maybe no  | 33| 22.0|
|maybe yes | 34| 22.7|
|yes       | 37| 24.7|
|NA        | 24| 16.0|
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...