r - 关于如何正确使用 reshape() 函数的进一步说明
问题描述
我正在研究一个项目,以了解学生在大学期间每年平均每个学期的学习量是否存在趋势。读入时,每个数据帧都被列为year1
、year2
等。我开始使用的数据帧具有以下格式:
学生卡 | 地区 | 年 | 学期 | 星期 | 数小时 |
---|---|---|---|---|---|
1 | 西方 | 1 | 落下 | 1 | 4-6 |
1 | 西方 | 1 | 落下 | 2 | 7-9 |
1 | 西方 | 1 | 落下 | 3 | 7-9 小时 |
当然,这仅列出了一些条目。
地区、年份和周列已被删除。年份是因为每年都有一个单独的 csv 文件,而周列是因为特定的星期并不重要,只是小时数。新的数据框被命名为year1Reduced
,year2Reduced
等。
删除我所做的列后的下一件事是使用该reshape
函数将数据从“长”格式更改为“宽”格式,这样我就可以拥有三个新列,每个学期(秋季,春季,夏季)一个,数字每个学生在哪个学期每周学习的小时数。我是这样写的:
year1Reduced.wide.Reshape <- reshape(data = year1Reduced,
idvar = c("studentID"),
timevar = "semester",
direction = "wide",
v.names = c("numHours")
)
它奏效了,有点。我得到了一个不必要的列,我删除了它,但我也得到了秋季、春季和夏季的单独列,但是没有列出每个学生每周学习的所有小时数,它只列出了 for 下的第一个numHours
元素每个学生的每个学期。这是它的样子:
学生卡 | numHours.Fall | numHours.Spring | numHours.Summer |
---|---|---|---|
1 | 4-6 | 小于 1 | 1-3 小时 |
2 | 4-6 小时 | 1-3 | 1-3 小时 |
3 | 4-6 小时 | 小于 1 | 1-3 小时 |
我想弄清楚的是如何包含所有numHours
条目,而不是每个学生每学期只有一个条目。如果这只是我写的重塑代码的一个小改动,请告诉我。
我想要的格式如下所示:
学生卡 | numHours.Fall | numHours.Spring | numHours.Summer |
---|---|---|---|
1 | 4-6 | 小于 1 | 1-3 小时 |
1 | 5-7 小时 | 1-4 | 1-2 小时 |
1 | 4-6 小时 | 5-6 | 1-4 小时 |
任何帮助,将不胜感激。我对 R 很陌生,所以尽量解释它,就好像我一无所知。
解决方案
我们没有足够的数据来对此进行测试,但您可以尝试:
library(dplyr)
library(tidyr)
year1Reduced %>%
select(studentID, semester, numHours) %>%
group_by(studentID, semester) %>%
mutate(row = row_number()) %>%
ungroup %>%
pivot_wider(names_from = semester, values_from = numHours) %>%
select(-row)
推荐阅读
- python - 可重用 WebDriverWait 问题“对象没有属性‘驱动程序’”
- python - Add2LinkedList -- 给出 SyntaxError: Missing parentheses in call to 'print'
- python - 将一些参数从命令行直接传递给 matplotlib
- node.js - 如何在 sequelize 中使用 beforeBulkCreate 挂钩加密密码
- c# - 如何在 Quartz.net 中创建工作?
- basic - 大多数 8 位 BASIC 实现是哪种类型的解释器?
- r - eval 中的错误(predvars,data,env):找不到对象但是,该对象似乎确实存在
- firebase - 在可调用的 Firebase 函数中保存对 Firebase 存储的 DocRaptor 响应
- html - 为什么使用 align-items=center center 图像不能正确弯曲方向列
- amazon-ec2 - ec2 和 EKS pod 之间的流量加密