重新组织数据框

时间:2014-03-28 04:16:15

标签: r dataframe reshape2

我正在尝试使用reshape2库重新组织我的数据框。尽管令人信服,但我无法获得预期的结果。

这是我的data.frame

   > mydata                
       Destination S1 S2 S3 S4
    1           D1 94 87 84 75
    2           D2 94 87 84 75
    3           D3 94 87 84 75
    4           D4 10 95 92 83

这是我所期待的。

Source  Destination Value
    S1      D1      94
    S2      D1      87
    S3      D1      84
    S4      D1      75
    S1      D2      94
    S2      D2      87
    S3      D2      84
    S4      D2      75
    S1      D3      94
    S2      D3      87
    S3      D3      84
    S4      D3      75
    S1      D4      10
    S2      D4      95
    S3      D4      92
    S4      D4      83

我尝试转置data.frame,使用以下内容:

> mydata.T <- t(mydata[,2:ncol(mydata)])
> 
> mydata.T
S1   94   94   94   10
S2   87   87   87   95
S3   84   84   84   92
S4   75   75   75   83

我尝试使用melt,但我无法得到确切的结果。

有人可以帮我吗?

2 个答案:

答案 0 :(得分:1)

t上使用data.frame ranspose有什么问题?

如果您想使用“reshape2”,可以尝试以下方法:

mydataLong <- melt(mydata, id.vars="Destination")
mydataLong
#    Destination variable value
# 1           D1       S1    94
# 2           D2       S1    94
# 3           D3       S1    94
# 4           D4       S1    10
# 5           D1       S2    87
# 6           D2       S2    87
# 7           D3       S2    87
# 8           D4       S2    95
# 9           D1       S3    84
# 10          D2       S3    84
# 11          D3       S3    84
# 12          D4       S3    92
# 13          D1       S4    75
# 14          D2       S4    75
# 15          D3       S4    75
# 16          D4       S4    83

在基数R中,您可以尝试以下输出:

cbind(mydata[1], stack(mydata[-1]), row.names = NULL)

如果你想要那个紧凑的转置输出,你可以这样做:

dcast(mydataLong, variable ~ Destination)
#   variable D1 D2 D3 D4
# 1       S1 94 94 94 10
# 2       S2 87 87 87 95
# 3       S3 84 84 84 92
# 4       S4 75 75 75 83

答案 1 :(得分:0)

data.frame(Destination=mydata$Destination, Value=as.vector(data.matrix(mydata[-1]) ))

我的猜测是,这来自一个表操作,应该是:

 as.data.frame(table( something ) )