9

我有一个数据集,其中包含对 9pt 规模的李克特项目的响应。我想创建数据的频率表(和条形图),但规模上的某些值从未出现在我的数据集中,因此table()从频率表中删除该值。我希望它以 . 的频率呈现值0。也就是说,给定以下数据集

# Assume a 5pt Likert scale for ease of example
data <- c(1, 1, 2, 1, 4, 4, 5)

我想获得以下频率表,而无需手动插入名为3value的列0

1 2 3 4 5 
3 1 0 2 1

我是新来的R,所以也许我忽略了一些基本的东西,但我还没有遇到可以提供所需结果的功能或选项。

4

3 回答 3

21

编辑:

tabular生成频率表,同时table生成列联表。但是,为了在上面的示例中获得一维列联表中的零频率,当然,下面的代码仍然有效。


这个问题提供了缺失的链接。通过将 Likert 项转换为因子,并明确指定级别,0仍然计算频率为 的级别

data <- factor(data, levels = c(1:5))
table(data)

产生所需的输出

于 2012-12-04T14:33:19.113 回答
7

table生成列联表,同时tabular生成包含零计数的频率表。

tabulate(data)
# [1] 3 1 0 2 1

另一种方式(如果你有从 1 开始的整数 - 但在其他情况下很容易修改):

setNames(tabulate(data), 1:max(data))  # to make the output easier to read
# 1 2 3 4 5 
# 3 1 0 2 1 
于 2014-02-03T22:03:50.300 回答
0

如果您想快速计算多个 likert 项目的计数或比例并在 data.frame 中获取输出,您可能会喜欢包psych::response.frequencies中的函数psych

让我们创建一些数据(注意没有 9):

df <- data.frame(item1 = sample(1:7, 2000, replace = TRUE), 
                 item2 = sample(1:7, 2000, replace = TRUE), 
                 item3 = sample(1:7, 2000, replace = TRUE))

如果要计算每个类别中的比例

psych::response.frequencies(df, max = 1000, uniqueitems = 1:9)

你得到以下信息:

           1      2     3      4      5      6      7 8 9 miss
item1 0.1450 0.1435 0.139 0.1325 0.1380 0.1605 0.1415 0 0    0
item2 0.1535 0.1315 0.126 0.1505 0.1535 0.1400 0.1450 0 0    0
item3 0.1320 0.1505 0.132 0.1465 0.1425 0.1535 0.1430 0 0    0

如果你想要计数,你可以乘以样本大小:

psych::response.frequencies(df, max = 1000, uniqueitems = 1:9) * nrow(df)

您会得到以下信息:

        1   2   3   4   5   6   7 8 9 miss
item1 290 287 278 265 276 321 283 0 0    0
item2 307 263 252 301 307 280 290 0 0    0
item3 264 301 264 293 285 307 286 0 0    0

几点注意事项:

  • 默认max值为 10。因此,如果您有超过 10 个响应选项,您就会遇到问题。否则,在您的情况和许多李克特项目情况下,您可以省略该max论点。
  • uniqueitems指定可能的值。如果您的所有值都存在于至少一项中,那么这将从数据中推断出来。
  • 我认为该函数仅适用于数字数据。因此,如果您将 Likert 类别编码为“非常不同意”等,它将无法正常工作。
于 2017-06-08T05:27:11.420 回答