我是一名初学者,想学习使用R进行数据分析。最近我得到了一个预先格式化的环境观测模型数据集,以下是其中的一个示例子集:
date site obs mod site obs mod
2000-09-01 00:00:00 campus NA 61.63 city centre 66 56.69
2000-09-01 01:00:00 campus 52 62.55 city centre NA 54.75
2000-09-01 02:00:00 campus 52 63.52 city centre 56 54.65
基本上,这些数据包括各个站点的污染物每小时观测和模拟浓度的时间序列,在“重复的列”中,即站点-观测-模拟(在示例中我只显示了75个站点中的2个)。我将这个“宽”数据集读入成一个数据框,并希望将其转换为“较窄”的格式,即:
date site obs mod
2000-09-01 00:00:00 campus NA 61.63
2000-09-01 01:00:00 campus 52 62.55
2000-09-01 02:00:00 campus 52 63.52
2000-09-01 00:00:00 city centre 66 56.69
2000-09-01 01:00:00 city centre NA 54.75
2000-09-01 02:00:00 city centre 56 54.65
我认为我应该使用“reshape2”包来完成这个任务。首先,我尝试将数据集melt,然后再进行dcast:
test.melt <- melt(test.data, id.vars = "date", measure.vars = c("site", "obs", "mod"))
然而,它只返回了一半的数据,即第一个站点(“校园”)之后的所有站点(“市中心”)的记录都被截断了:
date variable value
2001-01-01 00:00:00 site campus
2001-01-01 01:00:00 site campus
2001-01-01 02:00:00 site campus
2001-01-01 00:00:00 obs NA
2001-01-01 01:00:00 obs 52
2001-01-01 02:00:00 obs 52
2001-01-01 00:00:00 mod 61.63
2001-01-01 01:00:00 mod 62.55
2001-01-01 02:00:00 mod 63.52
我随后尝试了 recast:
test.recast <- recast(test.data, date ~ site + obs + mod)
然而,它返回了错误信息:
Error in eval(expr, envir, enclos) : object 'site' not found
我已经尝试搜索过以前的问题,但没有找到类似的情况(如果我错了,请纠正)。请有人帮忙吗?
非常感谢!
reshape2
语言中,它不完全是“熔化”的。请参见我的更新答案,了解两种选项。 - A5C1D2H2I1M1N2O1R2T1