r - R通过标识符合并列
问题描述
我有一个很长的数据集,其中包含多个学期的学生成绩和课程。每个学生都有许多 NA 和许多行。我希望每个学生有一个长行来填写这些 NA,但保持相同的列名。
这是一个示例:
library(tidyverse)
sample <- tibble(student = c("Corey", "Corey", "Sibley", "Sibley"),
fall_course_1 = c("Math", NA, "Science", NA),
fall_course_2 = c(NA, "English", NA, NA),
fall_grade_1 = c(90, NA, 98, NA),
fall_grade_2 = c(NA, 60, NA, NA))
这就是我希望它看起来的样子:
library(tidyverse)
answer <- tibble(student = c("Corey", "Sibley"),
fall_course_1 = c("Math", "Science"),
fall_course_2 = c("English", NA),
fall_grade_1 = c(90, 98),
fall_grade_2 = c(60, NA))
有些学期,有些学生上很多课,有些只上一门。我尝试过使用 coalesce(),但我无法弄清楚。任何帮助,将不胜感激!
解决方案
应该这样做,将数据旋转长,删除 na,然后将其旋转回宽。
您需要暂时将数值转换为字符,以便它们可以与课程标签放在同一列中,然后 type_convert() 是一种将它们重新放回的懒惰方式。
library(dplyr)
library(tidyr)
library(readr)
reshaped <- sample %>%
mutate_if(is.numeric, as.character) %>%
pivot_longer(-student) %>%
drop_na() %>%
pivot_wider(student, names_from = name, values_from = value) %>%
type_convert()
推荐阅读
- java - 如何在 Java 中修复“主线程”java.lang.NoClassDefFoundError: org/eclipse/swt/SWT 中的异常
- azure - 使用 Azure 函数和服务总线进行序列处理
- android - 如何减少Android进程中/dev/ashmem/dalvik-main空间(区域空间)的大小?
- jquery - jquery.repeater 使用 setList 函数渲染多个组时存在问题
- java - WSDL 文件到 Jar 文件
- reactjs - React hooks:如何在类组件中在构造函数中初始化的功能组件中编写变量
- gluon-mobile - 如何在 Gluon 移动应用上实现 JWT
- jquery - 仅针对特定类的一个元素的 JQuery 事件
- typo3 - 在 Typo3 代码中提交表单时出错:201905310232036dfcc153
- python - 如何训练神经网络来识别书面和口头数字是否相同