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

9

我有一个包含九个等级的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个回答

21

编辑:

tabular 生成频率表,而 table 生成列联表。然而,在一个一维列联表中要得到零频率(如上面的例子),下面的代码仍然有效。


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

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

产生了期望的输出


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 

好的。谢谢,但是tabulate不是生成频率表的通用方法。它只适用于正整数。例如,尝试使用tabulate(0:1)tabulate(-50000:1)(猜猜为什么参数如此不同时输出相同)。Tabulate适用于您的特殊情况(您恰好有一个从1开始的“Likert”量表,并且对因子有效(因为按惯例,级别被编码为从1开始的正连续整数)。它将无法处理字符向量或零和负值。 - lebatsnok
虽然我希望我的答案能够被接受,但实际上我认为其他答案更具普适性。将x转换为因子,然后使用“table”制作一维列联表可以处理各种数据,而“tabulate”只能处理特定情况。 - lebatsnok
事实上,如果零频数据对应于最大值,这是无效的。例如,在上面的示例中,如果data中没有任何5,则tabulate也不会显示它。 - AugSB

0
如果您想快速计算多个Likert项目的计数或比例,并在数据框中获得输出,您可能会喜欢psych包中的psych::response.frequencies函数。
让我们创建一些数据(请注意,没有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

一些注意事项:
  • 默认的最大值是10。因此,如果你有超过10个响应选项,就会出现问题。否则,在你的情况下,以及许多Likert项目的情况下,你可以省略max参数。
  • uniqueitems指定可能的值。如果所有的值都在至少一个项目中出现,那么这个值将从数据中推断出来。
  • 我认为这个函数只适用于数字数据。因此,如果你的力量表类别编码为“强烈反对”等,它就不会起作用。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接