【发布时间】:2016-02-22 21:04:12
【问题描述】:
我有一个包含团队成员评分的大型电子表格,我想从中计算人们对自己的评价、团队中其他人对他们的评价以及他们对团队中其他人的评价(所有平均值)。我一直在尝试使用dplyr 来执行此操作,因为我以前使用过它,并且我认为group_by 在进行这些计算时会简化事情。我一直无法弄清楚,所以我寻求帮助。我会试着解释一下我的想法。
这是一个示例数据集:
data <- read.table(text="
Team Rater A1 B1 C1 A2 B2 C2 A3 B3 C3 A4 B4 C4 A5 B5 C5 A6 B6 C6
1 1 2 4 4 2 1 5 2 2 3 4 4 4 3 2 1 NA NA NA
1 2 4 5 4 4 5 1 1 1 5 5 3 1 4 5 2 NA NA NA
1 3 2 1 4 3 5 5 2 1 5 1 1 4 1 1 4 NA NA NA
1 4 4 3 4 3 5 1 3 1 3 5 5 5 5 2 2 NA NA NA
1 5 3 4 5 4 3 3 5 5 4 1 4 5 5 5 1 NA NA NA
2 1 3 5 3 4 1 1 3 4 3 4 3 2 2 2 3 3 5 3
2 2 3 2 3 1 1 3 5 5 1 5 2 3 2 2 1 3 3 2
2 3 3 2 3 3 5 2 4 1 1 1 4 5 3 5 2 1 1 3
2 4 3 3 5 4 3 5 3 1 4 3 1 1 4 2 4 3 5 2
2 5 5 2 1 2 5 5 3 3 1 4 1 5 5 3 3 4 2 5
2 6 3 2 3 5 4 3 2 1 5 4 3 1 1 1 4 2 2 1",header = TRUE)
每位评分者为其他团队成员提供多个问题的输入。它的组织方式,评估者 1 回答关于他们自己的 A1、B1 和 C1。评分者 2 回答关于他们自己的 A2、B2 和 C2,等等。
自我评价
为了得到某人对自己的评价,我想应该是这样的:
data %>%
group_by(Team) %>%
mutate(self = rowMeans(select(.,ends_with(Rater)), na.rm = TRUE))
如果列选择是动态地基于他们的评分者编号会很方便。
来自其他人
我正在考虑根据除自我评分之外的那个人的平均总体评分来计算这个:
data %>%
group_by(Team) %>%
mutate(from = ( (mean(ends_with(Rater)) * n() - self ) / ( n() - 1 ) ) )
其他人
对于这个列计算,我的想法是这样的:
data %>%
mutate(of = select(A1:C6, -(ends_with(Rater))) %>% rowMeans(na.rm = TRUE))
(类似于这个answer)
结果
这是我正在寻找的新列的示例:
Team Rater self from of
1 1 3.33 3.58 2.75
1 2 3.33 3.33 3.33
1 3 2.67 2.92 2.67
1 4 5.00 3.08 3.00
1 5 3.67 2.67 3.83
如果您能对这些部分提供帮助,我将不胜感激!
【问题讨论】: