我有一个数据集,以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
的新手,所以也许我忽略了一些基本的东西,但我没有遇到能够提供所需结果的功能或选项。
答案 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
指定可能的值。如果您的所有值都存在于至少一个项目中,那么这将从数据中推断出来。