【问题标题】:Tally several columns of categorical variables in R在 R 中统计几列分类变量
【发布时间】:2020-06-22 23:56:50
【问题描述】:

我有调查数据,其中受访者以李克特量表对几个项目进行评分,如下所示:

id  item1                   item2                   item3                   item4

42  Moderately adequate     Completely adequate     Very adequate           Very adequate
48  Moderately adequate     Moderately adequate     Moderately adequate     Moderately adequate
49  Moderately adequate     Moderately adequate     Moderately adequate     Moderately adequate
50  Slightly adequate       Slightly adequate       Slightly adequate       Not at all adequate

我想将它转换为一个数据结构,对于每个项目,它都有一个收到的评分计数,如下所示:

rating              item1       item2       item3       item4

Not at all adequate     0           0           0           1
Slightly adequate       1           1           1
Moderately adequate     3           2           2           2
Very adequate           0           0           1           1
Completely adequate     0           1           0           0

重塑这些数据最有效的方法是什么?我试过dcast(data = melt(data, id.vars = "id"), value ~.),但是这会汇总所有四个项目的评分,而不是将每个项目保留在自己的列中; counttally 也有同样的问题。我可以逐项执行此操作,然后将列重新合并在一起,但似乎必须有一种更简单的方法,特别是因为我需要在多个不同的项目列表中复制它。

【问题讨论】:

    标签: r dplyr tidyverse data-cleaning survey


    【解决方案1】:

    以长格式获取数据,count 并以宽格式获取:

    library(dplyr)
    library(tidyr)
    
    data %>%
      pivot_longer(cols = -id) %>%
      count(name, value) %>%
      pivot_wider(names_from = name, values_from = n, values_fill = list(n = 0))
    
    # A tibble: 5 x 5
    #  value               item1 item2 item3 item4
    #  <chr>               <int> <int> <int> <int>
    #1 Moderately_adequate     3     2     2     2
    #2 Slightly_adequate       1     1     1     0
    #3 Completely_adequate     0     1     0     0
    #4 Very_adequate           0     0     1     1
    #5 Not_at_all_adequate     0     0     0     1
    

    数据

    我在item 列的值中添加了下划线,因为很难复制带有空格的数据。

    data <- structure(list(id = c(42L, 48L, 49L, 50L),item1 = c("Moderately_adequate",
    "Moderately_adequate", "Moderately_adequate", "Slightly_adequate"
    ), item2 = c("Completely_adequate", "Moderately_adequate", "Moderately_adequate",
    "Slightly_adequate"), item3 = c("Very_adequate", "Moderately_adequate", 
    "Moderately_adequate", "Slightly_adequate"), item4 = c("Very_adequate", 
    "Moderately_adequate", "Moderately_adequate", "Not_at_all_adequate"
    )), class = "data.frame", row.names = c(NA, -4L))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-08-06
      • 2021-06-11
      • 1970-01-01
      • 2013-04-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多