代码之家  ›  专栏  ›  技术社区  ›  Homer Jay Simpson

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

  •  0
  • Homer Jay Simpson  · 技术社区  · 2 年前

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

    A. B C
    1 1-强烈反对 5-强烈同意 1-坚决反对
    2个左右 5-强烈同意 2-不同意
    3-4同意 2-不同意 2-不同意
    4 2-不同意 2-不同意 5-强烈同意

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

    项目 1-坚决反对 2-不同意 三个左右 4-同意 5-强烈同意
    A. 26.72 21.41 27.45 17.80 6.59
    B 25 20.2 28.27 18.36 8
    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
    
    1 回复  |  直到 2 年前
        1
  •  2
  •   PGSA    2 年前
    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
    
    推荐文章