我有一些关于学生成绩的数据,这些数据显示了学生所修的课程,所学的学期以及所获得的成绩。现在看起来像这样:
Student Course Term Grade
1 Math Fall18 A
1 English Fall17 B
2 Math Fall17 B
2 English Fall17 A
因此,有些学生在同一学期上课,有些则在不同学期上课,依此类推。这就是我希望数据看起来像的样子:
Student Term Math English
1 Fall17 NA B
1 Fall18 A NA
2 Fall17 B A
所以我想扩大它,但不要一直扩大,如果有任何意义的话。
我尝试通过以下方式使用gather
和spread
:
df %>%
gather(key, Grade, -Student, -Course, -Term) %>%
spread(key="Course", value="Grade",-Term)
收集部分工作正常。但是,spread命令会发现重复的术语并给我以下错误:Error: Each row of output must be identified by a unique combination of keys. Keys are shared for 182 rows:
这182行当然是同一学期上课的学生。
我还尝试使用新的pivot_longer
和pivot_wider
语法,因为我认为spec
选项可能有用。但是我似乎只是进一步混淆了自己。我尝试过:
df %>%
pivot_wider_spec(names_from = c(Course, Term), values_from = Grade)
但这给了我
.name .value Course Term
<chr> <chr> <chr> <chr>
1 Math_Fall18 Grade Math Fall18
2 Math_Fall17 Grade Math Fall17
3 English_Fall18 Grade English Fall18
那当然不是我想要的。我搞砸了吗?我已经尝试过这里提供的解决方案:Using spread with duplicate identifiers for rows,但是它也没有满足我的需要,它为每个学生创建了一个专栏。我只需要为每门课程设置一列。