1

我正在尝试使用cast()Reshape 库中的数据进行转换,但我得到了意想不到的结果。我从一个包含大量数据的数据框开始,然后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。

有一些 Student.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?

感谢您的帮助!

4

1 回答 1

1

这是因为您的转换公式Student.Id ~ tesmonth不包含 data.frame 中的所有变量,即Proficiency.Level不包括在内。

这意味着,一般来说,强制转换必须执行聚合,并且聚合公式默认为length.

您似乎有一个特殊情况,每个学生的月份和熟练程度之间存在一对一的关系。因此,您应该选择一个保留数据的聚合函数,例如采用mean 以下应该工作:

cast(all_ia, Student.ID ~ testmonth, value=mean("Proficiency.Level"))

您不提供测试数据,因此未进行测试。

于 2011-06-15T14:16:34.483 回答