我正在尝试使用Reshape库中的cast()
来投射数据,但是我得到了意想不到的结果。我从一个包含大量数据的数据框开始,all_ia[all_ia$Student.ID == 102050,]
返回
66 102050 1 Mar
67 102050 0 Dec
68 102050 1 May
69 102050 0 Feb
变量分别是Student.ID,Proficiency.Level和testmonth。
有一些学生.ID在5月份,9月。
当我运行all_ia.cast <- cast(all_ia, Student.ID ~ testmonth, value=c("Proficiency.Level"), fill=c("NA"))
然后运行all_ia.cast[all_ia.cast$Student.ID == 102050,]
时,我会得到意想不到的结果:
1325 102050 1 1 1 1 NA
其中变量分别是Student.ID,Dec,Feb,Mar,May,Sep。当我运行cast()
Aggregation requires fun.aggregate: length used as default
时会发出警告。
我的问题是,为什么fun.aggregate需要,为什么演员表中的Dec和Feb变量等于1而不是0?
感谢您的帮助!
答案 0 :(得分:1)
这是因为您的投射公式Student.Id ~ tesmonth
不包含data.frame中的所有变量,即不包含Proficiency.Level
。
这通常意味着转换必须执行聚合,聚合公式默认为length
。
您似乎有一个特殊情况,每个学生的月和熟练程度之间存在一对一的关系。因此,您应该选择保留数据的聚合函数,例如取mean
以下内容应该有效:
cast(all_ia, Student.ID ~ testmonth, value=mean("Proficiency.Level"))
您不提供测试数据,因此未对此进行测试。