【发布时间】:2012-02-25 22:58:44
【问题描述】:
我正在尝试使用 reshape2 包将一些数据从长转换为宽,但是我遇到了一个我无法解决的错误。在下面的示例中,我创建了一些与我的真实数据相似的假数据。我想将每个“主题”转换为包含给定“ID”号的该主题中所有“学分”总和的列。
library(reshape2)
# 创建假数据并将其转换为数据框
ID = rep(c(100,101,102,103), each=5)
subj = rep(c("CHEM","ENGL","HIST","MATH"), 5)
credits = rep(3, 20)
df = data.frame(ID, subj, credits)
# 从long转换为wide,以“subj”的值为新列
# 和“credits”的总和作为每个“subj”的值
df.wide = dcast(df, ID ~ subj, value.var=credits, fun.aggregate=sum)
这是我在运行 dcast 命令时想要得到的结果:
ID CHEM ENGL HIST MATH
100 6 3 3 3
101 3 6 3 3
[and so on for each value of ID]
这是我在运行上面的代码时实际遇到的错误:
Error in .subset2(x, i, exact = exact) :
recursive indexing failed at level 2
如果我从 dcast 调用中删除“fun.aggregate=sum”,我会得到同样的错误。
另外,如果我使用 sample() 函数(而不是 rep())为“credits”创建值,并调用 dcast(没有 fun.aggregate=sum),我会收到以下错误:
Error in .subset2(x, i, exact = exact) :
no such index at level 1
据我所知,我之前已经运行过类似的 dcast 命令,没有问题。当我看到解决方案时,我猜我会拍拍我的额头并大喊“doh”,但我被卡住了。
【问题讨论】: