【问题标题】:How to resolve dcast error with reshape2 package in R?如何使用 R 中的 reshape2 包解决 dcast 错误?
【发布时间】: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”,但我被卡住了。

【问题讨论】:

    标签: r reshape


    【解决方案1】:

    只需将学分放在引号中:

    df.wide = dcast(df, ID ~ subj, value.var="credits", fun.aggregate=sum)
    df.wide
       ID CHEM ENGL HIST MATH
    1 100    6    3    3    3
    2 101    3    6    3    3
    3 102    3    3    6    3
    4 103    3    3    3    6
    

    【讨论】:

    猜你喜欢
    • 2013-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-22
    • 1970-01-01
    相关资源
    最近更新 更多