漂亮但纯文本 table 用于 R 中的李克特量表数据
Nice but plain text table for likert scale data in R
我有李克特量表数据。我想以一种简单的(对于 none-R 用户)阅读方式显示它们。重要的是它需要在控制台上是 纯文本。没有图形或 likert
包提供的东西。它不必是 table()
但它应该看起来像 table - 不管它背后有什么神奇的 R 构造。
此 table 仅供开始探索数据集时的第一个视图。
这是示例数据
> 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
我"nice"table可能看起来像这样
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
-< n
)以及如何防止在第一行打印带有数字的数字。
我完全愿意接受有关如何以 纯文本.
如果我对你的问题理解正确,我相信你可以使用 knitr
包中的 kable
函数来解决你的问题:
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|
EDIT2:您的百分比加起来似乎没有达到 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|
我有李克特量表数据。我想以一种简单的(对于 none-R 用户)阅读方式显示它们。重要的是它需要在控制台上是 纯文本。没有图形或 likert
包提供的东西。它不必是 table()
但它应该看起来像 table - 不管它背后有什么神奇的 R 构造。
此 table 仅供开始探索数据集时的第一个视图。
这是示例数据
> 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
我"nice"table可能看起来像这样
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
-< n
)以及如何防止在第一行打印带有数字的数字。
我完全愿意接受有关如何以 纯文本.
如果我对你的问题理解正确,我相信你可以使用 knitr
包中的 kable
函数来解决你的问题:
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|
EDIT2:您的百分比加起来似乎没有达到 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|