【发布时间】:2020-08-25 08:02:33
【问题描述】:
我想计算每个学生的平均考试成绩并将其作为新列添加到数据框中:
library(dplyr)
my_students <- c("John", "Lisa", "Sam")
student_exam <- c("John", "Lisa", "John", "John")
score_exam <- c(7, 6, 7, 6)
students <- as.data.frame(my_students)
scores <- as.data.frame(student_exam)
scores <- cbind(scores, score_exam)
new_frame <- students %>% mutate(avg_score = (scores %>% filter(student_exam == my_students) %>% mean(score_exam)))
但上面的代码给出了以下错误:
Error in Ops.factor(student_examn, my_students) :
level sets of factors are different
我认为它与 filter(student_exam == my_students) 有关。我将如何在 dplyr 中执行此操作?
【问题讨论】:
-
不太清楚
filter试图做什么。你所有的学生在你的例子中都有一个分数。这样的事情适用于您的情况:df = data.frame(student_exam, score_exam); df %>% group_by(student_exam) %>% mutate(avg_score = mean(score_exam)) %>% ungroup() -
@AntoniosK 如果我是正确的,这会将 Sam 从结果中删除。我需要山姆留下来。如果它没有学生的成绩,它应该只是说 NA。