【发布时间】:2019-02-25 15:39:18
【问题描述】:
我正在处理一个看起来像这样的数据集。
#Dataframe
df=data.frame(Type=c(1,2,4,5,4,3,3,4,5,1,2,3,2,1,2,3,3,2,1,1,NA),
Q1=c(1,2,6,8,9,10,2,6,7,4,9,9,1,2,NA,4,3,8,7,6,4),
Q2=c(1,2,4,NA,8,2,1,2,10,7,5,5,5,8,2,7,4,8,7,5,1))
上下文
数据框由调查问卷的结果组成。
第一列Type表示回答问卷的员工类型,其中1 = 'Worker',2 = 'Factory Lead',3 = 'Administrative Staff',4 = ' Middle Management' & 5 = 'Executive'
第二列和第三列 (Q1 & Q2) 是问题,等级为 1 = 'Strongly Agree' 到 10 (Strongly Disagree)。
我正在努力实现的目标
我想根据分数计算每个Type 的响应总数。
我已经为分数创建了垃圾箱,它们是 -
1) Low 协议 - 分数从 0 到 4
2) Medium 同意 - 5 或 6 分
3) High 同意 - 7 或 8 分
4) Very High 同意 - 9 或 10 分
所以我想计算每个评分箱中每个工人的响应数。
我的尝试
library(dplyr)
library(tidyr)
result=df %>%
gather(Item,response,-1) %>%
filter(!is.na(response)) %>%
group_by(Type,Item) %>%
filter(!is.na(Type)) %>%
summarise(Low=sum(response %in% c(0,1,2,3,4)),
Medium=sum(response %in% c(5,6)),
High=sum(response %in% c(7,8)),
VHigh=sum(response %in% c(9,10)) %>%
spread(Type,-Item)
我的逻辑是我使用tidyr 库和第一个gather 分数来计算总响应。然后展开列,这样我就有了按工人和分数类别的小计。
例如,对于第一季度,Low-Worker、Medium-Worker、High-Worker、Very High-Worker、Low-Factory Lead、Medium-Factory Lead 的总响应列......等等适用于员工和分数类别的所有组合。
很明显,我的代码有问题。
期望的输出
一个包含 两行(Q1 & Q2)和 20 列(针对每个员工分数组合)的数据框。
对此的任何帮助将不胜感激。
【问题讨论】:
标签: r tidyr data-manipulation spread