传播和收集每单位多个观测值

时间:2019-05-30 16:06:14

标签: r tidyr

我有一些关于学生成绩的数据,这些数据显示了学生所修的课程,所学的学期以及所获得的成绩。现在看起来像这样:

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

所以我想扩大它,但不要一直扩大,如果有任何意义的话。

我尝试通过以下方式使用gatherspread

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_longerpivot_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,但是它也没有满足我的需要,它为每个学生创建了一个专栏。我只需要为每门课程设置一列。

0 个答案:

没有答案