If you want to quickly calculate the number or proportions for several equivalent elements and get your result in the data.frame file, you might like the psych::response.frequencies function in the psych package.
Allows you to create some data (note that there are no 9 of them):
df <- data.frame(item1 = sample(1:7, 2000, replace = TRUE), item2 = sample(1:7, 2000, replace = TRUE), item3 = sample(1:7, 2000, replace = TRUE))
If you want to calculate the share in each category
psych::response.frequencies(df, max = 1000, uniqueitems = 1:9)
You will get the following:
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
If you want calculations, you can multiply by the sample size:
psych::response.frequencies(df, max = 1000, uniqueitems = 1:9) * nrow(df)
You get the following:
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
A few notes:
- the default
max is 10. Thus, if you have more than 10 answer options, you will have problems. Otherwise, in your case and in many cases with Likert elements, you can omit the max argument. uniqueitems indicates possible values. If all your values โโwere present in at least one element, this will be deduced from the data.- I think the function only works with numeric data. Therefore, if you have your category categories encoded "Strongly disagree," etc., they will not work.
Jeromy Anglim
source share