如何使用 R 中的 dplyr 函数将仅因子列的 Likert 量表从长转换为宽?

问题描述 投票:0回答:1

我在 R 中有以下数据框,具有 3 个因子列,具有相同的级别,如下所示:

A B C
1 1-强烈不同意 5-强烈同意 1-强烈不同意
2 3 一般 5-强烈同意 2-不同意
3 4-同意 2-不同意 2-不同意
4 2-不同意 2-不同意 5-强烈同意

我想使用 dplyr 函数来将我的数据框更改为这样:

项目 1-强烈不同意 2-不同意 3 一般 4-同意 5-强烈同意
A 26.72 21.41 27.45 17.80 6.59
B 25.0 20.2 28.27 18.36 8.0
C 6.3 9.5 28.6 40.35 15.17

单元格上的数字是任意的。

A = sample(c('1-Strongly disagree','2-Disagree','3-so-so','4-Agree','5-Strongly agree'),1000,replace = TRUE)
B = sample(c('1-Strongly disagree','2-Disagree','3-so-so','4-Agree','5-Strongly agree'),1000,replace = TRUE)
C = sample(c('1-Strongly disagree','2-Disagree','3-so-so','4-Agree','5-Strongly agree'),1000,replace = TRUE)

df = tibble(A,B,C)%>%
  mutate(across(everything(),as.factor));df
r dataframe likert
1个回答
0
投票
library(tidyverse)
set.seed(1234) # for reproducible testing
A = sample(c('1-Strongly disagree','2-Disagree','3-so-so','4-Agree','5-Strongly agree'),1000,replace = TRUE)
B = sample(c('1-Strongly disagree','2-Disagree','3-so-so','4-Agree','5-Strongly agree'),1000,replace = TRUE)
C = sample(c('1-Strongly disagree','2-Disagree','3-so-so','4-Agree','5-Strongly agree'),1000,replace = TRUE)

df = tibble(A,B,C)%>%
  mutate(across(everything(),as.factor));df

df |> 
  pivot_longer(cols = everything(), names_to = "Item") |>
  pivot_wider(names_from = value, values_fn = length)

给予

# A tibble: 3 × 6
  Item  `4-Agree` `1-Strongly disagree` `2-Disagree` `5-Strongly agree` `3-so-so`
  <chr>     <int>                 <int>        <int>              <int>     <int>
1 A           194                   194          181                197       234
2 B           193                   195          194                219       199
3 C           201                   195          205                199       200
© www.soinside.com 2019 - 2024. All rights reserved.