【问题标题】:Transpose dataset and counting occurrences转置数据集并计算出现次数
【发布时间】:2019-10-22 23:28:03
【问题描述】:

原始数据集包含长格式的调查数据

原始数据集

T Q1  Q2  Q3    
M1 3 5 4  
M1 3 1 3  
M1 1 3 1  
M2 4 4 2  
M2 2 2 3  
M2 5 5 5

其中T 是受访者的类型,Q1--Q3 是问题,单元格值对应于他们在1-- 上的一致程度5 李克特 规模。

想要的数据集

T Q A1 A2 A3 A4 A5  
M1 Q1 1 0 3 0 0  
M2 Q1 0 1 0 1 1  
M1 Q2 1 0 1 0 1  
M2 Q2 0 1 0 1 1  
M1 Q3 1 0 1 1 0  
M2 Q3 0 1 1 0 1

其中 A1--A5 是可能的答案 (1--5 Likert),单元格值包含每个组 M1 和 M2 的这些答案的频率。

如何从原始数据集想要的数据集

【问题讨论】:

  • 您的问题似乎不完整。你能把句子说完吗?
  • reshape2::recast(df, Type + variable ~ paste0("A",value), id.var = "Type")

标签: r dataframe data-manipulation


【解决方案1】:

一种方法是使用 dplyr 和 tidyr

library(dplyr)
library(tidyr)

df <- data.frame(Type = c('M1', 'M1', 'M1', 'M2', 'M2', 'M2'),
           Q1 = c(3, 3, 1, 4, 2, 5),
           Q2 = c(5, 1, 3, 4, 2, 5),
           Q3 = c(4, 3, 1, 2, 3, 5))

df %>%
  gather(key = 'Q', value = 'A', -Type) %>%
  group_by(Type, Q, A) %>%
  summarize(Count = n()) %>%
  mutate(A = paste0('A', A)) %>%
  spread(key = A, value = Count, fill = 0) %>%
  arrange(Q, Type)

【讨论】:

    【解决方案2】:

    我使用tidyverse 函数来解决您的问题。请注意,我必须创建行标识符,因为并非总是收集分布是对称的(更多信息,请查看this out)

    library(tidyverse)
    
    # Data
    x <- data.frame(
      T = c("M1", "M1", "M1", "M2", "M2", "M2"),
      Q1 = c(3, 3, 1, 4, 2, 5),
      Q2 = c(5, 1, 3, 4, 2, 5),
      Q3 = c(4, 3, 1, 2, 3, 5)
    )
    
    
    # Modification
    gather(x, key, A, -T) %>%
      group_by(T, key, A) %>%
      mutate(row_id = 1:n()) %>%
      ungroup() %>%
      spread(A, A, fill = 0, sep = "") %>%
      select(-row_id)
    
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多