我有一个大型的团队成员评级电子表格,我想从中计算出人们如何评价自己,团队中其他人如何评价他们,以及他们如何评价团队中的其他人(所有平均值)。我一直在尝试使用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。 Rater 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
如果您可以帮助我们,我会很感激!
答案 0 :(得分:3)
我建议首先将您的数据转换为“整洁”格式tidyr
,例如
library(tidyr)
tidy <- data %>% gather(QV,Rating,-Team,-Rater) %>%
separate(QV, into=c("Quest","Rated"), sep=1) %>%
mutate(Rated=as.numeric(Rated)) %>%
filter(!is.na(Rating))
这会将您的数据转换为具有以下形状
Team Rater Quest Rated Rating
1 1 1 A 1 2
2 1 2 A 1 4
3 1 3 A 1 2
4 1 4 A 1 4
5 1 5 A 1 3
6 2 1 A 1 3
...
因此我们将您的数据转换为长格式。然后,您可以更直接地执行每个查询并将它们合并在一起
Reduce(left_join, list(
tidy %>% group_by(Team, Rater) %>% filter(Rated==Rater) %>% summarize(self=mean(Rating)),
tidy %>% group_by(Team, Rated) %>% filter(Rated!=Rater) %>% summarize(others=mean(Rating)) %>% rename(Rater=Rated),
tidy %>% group_by(Team, Rater) %>% filter(Rated!=Rater) %>% summarize(of=mean(Rating))
))
返回
Team Rater self others of
(int) (dbl) (dbl) (dbl) (dbl)
1 1 1 3.333333 3.583333 2.750000
2 1 2 3.333333 3.333333 3.333333
3 1 3 2.666667 2.916667 2.666667
4 1 4 5.000000 3.083333 3.000000
5 1 5 3.666667 2.666667 3.833333
6 2 1 3.666667 2.866667 2.866667
7 2 2 1.666667 3.466667 2.800000
8 2 3 2.000000 2.933333 2.866667
9 2 4 1.666667 3.133333 3.400000
10 2 5 3.666667 2.533333 3.200000
11 2 6 1.666667 3.000000 2.800000