在Likert数据的频率表中包括零频率

时间:2012-12-04 14:23:54

标签: r frequency

我有一个数据集,以9pt的比例对Likert项目做出回应。我想创建数据的频率表(和条形图),但是我的数据集中的某些值从未出现过,因此table()会从频率表中删除该值。我希望它以频率0呈现值。也就是说,给定以下数据集

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

我希望获得以下频率表,而无需手动插入名为3的值为0的列。

1 2 3 4 5 
3 1 0 2 1

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

3 个答案:

答案 0 :(得分:20)

修改

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


This question提供了缺失的链接。通过将Likert项目转换为系数并明确指定级别,仍会计算频率为0的级别

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

产生所需的输出

答案 1 :(得分: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 

答案 2 :(得分: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个响应选项,则会遇到问题。否则,在您的情况下,以及许多Likert项目案例中,您可以省略max参数。
  • uniqueitems指定可能的值。如果您的所有值都存在于至少一个项目中,那么这将从数据中推断出来。
  • 我认为该功能仅适用于数字数据。因此,如果你的喜欢类别被编码为“非常不同意”,那么它就无法使用。