【发布时间】:2020-09-05 02:58:05
【问题描述】:
我有以下数据集:
Email Relationship Q1 Q2 Q3 Q4
1 sample@email.com Self 1 2 2 3
2 sample@email.com Peer 3 3 4 5
3 sample@email.com Peer 5 2 3 1
4 sample@email.com Peer 4 1 2 3
5 sample@email.com Peer 2 3 3 4
6 sample@email.com Direct Report 3 3 4 4
7 sample@email.com Direct Report 5 2 4 4
8 other@email.com Self 3 4 4 2
9 other@email.com Peer 2 2 3 4
10 other@email.com Peer 3 3 3 2
11 other@email.com Peer 2 5 5 3
12 other@email.com Direct Report 4 4 4 3
13 other@email.com Direct Report 5 3 2 1
14 other@email.com Direct Report 2 4 5 3
我想将它从长转换为宽,这样我就可以计算每个关系组和总计的平均值:
Email Q1-Overall Q1-Self Q1-Peer Q1-Direct Report Q2-Overall Q2-Self Q2-Peer Q2-Direct Report
other@email.com 3.00 3.00 2.33 3.67 3.57 4.00 3.33 3.67
sample@email.com 3.29 1.00 3.50 4.00 2.28 2.00 2.25 2.50
我试过融化它:
df<-dcast(melt(Data_Long, id.vars=c("Email", "Relationship")), Email~Q1+Relationship)
这让我成功了,但我的问题是如何将它带到下一步以获得手段,或者是否有更有效的方法。由于我的数据有数百个问题,有没有办法有效地转换所有问题?
我还尝试了 dplyr 包汇总和传播命令,但无法找到一种方法来组合变量以在其中创建新变量。任何建议表示赞赏。
【问题讨论】:
-
为什么不先使用
aggregate或by计算均值?一旦你有办法,你可以将其转换为宽格式。你试过了吗? -
你很亲密。
dcast有一个fun.aggregate参数,您可以在这里使用:library(reshape2); dcast(melt(Data_Longt, measure.vars = paste0("Q", 1:4)), Email ~ paste(Relationship, variable, sep = "-"), fun.aggregate = mean).. -
.. 部分
~ paste(Relationship, variable, sep = "-")真的很方便恕我直言。
标签: r dataframe aggregate reshape