【发布时间】:2021-05-08 04:19:27
【问题描述】:
我正在研究一个项目,以了解学生在大学期间每年每个学期的平均学习量是否存在趋势。每个数据框在读入时被列为year1、year2等。我开始使用的数据框格式如下:
| studentID | region | year | semester | week | numHours |
|---|---|---|---|---|---|
| 1 | West | 1 | Fall | 1 | 4-6 |
| 1 | West | 1 | Fall | 2 | 7-9 |
| 1 | West | 1 | Fall | 3 | 7-9 hour(s) |
当然,这里只列出了一些条目。
地区、年份和星期列已删除。年份是因为每年都有一个单独的 csv 文件,而星期列是因为特定的星期并不重要,只是小时数。新数据框的名称为 year1Reduced、year2Reduced 等。
删除我所做的列后的下一件事是使用reshape 函数将数据从“长”格式更改为“宽”格式,这样我就可以拥有三个新列,每个学期一个(秋季、春季, 夏季) 以及每个学生在哪个学期每周学习的小时数。我是这样写的:
year1Reduced.wide.Reshape <- reshape(data = year1Reduced,
idvar = c("studentID"),
timevar = "semester",
direction = "wide",
v.names = c("numHours")
)
确实有效。我得到了一个不必要的列,我删除了它,但我也得到了秋季、春季和夏季的单独列,但是没有列出每个学生每周学习的所有小时数,它只列出了@下的第一个元素987654330@每个学生每个学期。这是它的样子:
| studentID | numHours.Fall | numHours.Spring | numHours.Summer |
|---|---|---|---|
| 1 | 4-6 | Less than 1 | 1-3 hour(s) |
| 2 | 4-6 hour(s) | 1-3 | 1-3 hour(s) |
| 3 | 4-6 hour(s) | less than 1 | 1-3 hour(s) |
我想弄清楚的是如何包含所有numHours 条目,而不是每个学生每学期只输入一个条目。如果只是我写的 reshape 代码的一个小改动,请告诉我。
我想要的格式是这样的:
| studentID | numHours.Fall | numHours.Spring | numHours.Summer |
|---|---|---|---|
| 1 | 4-6 | Less than 1 | 1-3 hour(s) |
| 1 | 5-7 hour(s) | 1-4 | 1-2 hour(s) |
| 1 | 4-6 hour(s) | 5-6 | 1-4 hour(s) |
任何帮助将不胜感激。我是 R 的新手,所以尽量解释得好像我一无所知。
【问题讨论】: