2013-02-07 41 views
-1

我有看起来像除与多个对象和倍以下一些纵向数据:宽重塑纵向数据长

Date  Sub1 Sub2 Sub3 
8/10/2012 19.0 18.9 20.7 
8/13/2012 19.0 19.1 19.5 

我有日期在该每个受试者(SUB1,SUB2和SUB3)给出得分。我怎样才能使用重塑或任何其他R包来改变这种长格式? 所以它看起来像这样:

Subject Score Date 
Sub1 19.0 8/10/2012 
Sub1 19.0 8/13/2012 
Sub2 18.9 8/10/2012 
Sub2 19.1 8/13/2012 
Sub3 20.7 8/10/2012 
Sub3 19.5 8/13/2012 

回答

0

,如果你的数据被称为dat

dat <- read.table(text="Date  Sub1 Sub2 Sub3 
        8/10/2012 19.0 18.9 20.7 
        8/13/2012 19.0 19.1 19.5 ",header=TRUE) 

    library(reshape2) 
    melt(dat) 

    # explicitly you would use Date as AN id 
    # melt(dat, id = "Date") 
+0

非常感谢。我一直困惑着什么时候使用reshape()vs melt()。我正在尝试使用重塑,因为我之前看到它使用纵向数据将宽转换为长,反之亦然。 – iantist

+0

@iantist,请参阅[我的回答](http://stackoverflow.com/a/14765994/1270695)了解如何在基本R重塑中执行此操作。此外,为避免将来对您的问题进行降价,请务必至少提供您所尝试的代码的指示。 – A5C1D2H2I1M1N2O1R2T1

1

基础R的reshape功能也能正常工作,这些类型的问题,只要你知道如何指定输入。

reshape(dat, direction = "long", 
     idvar = "Date", timevar = "Subject", 
     varying = 2:ncol(dat), sep = "") 
#     Date Subject Sub 
# 8/10/2012.1 8/10/2012  1 19.0 
# 8/13/2012.1 8/13/2012  1 19.0 
# 8/10/2012.2 8/10/2012  2 18.9 
# 8/13/2012.2 8/13/2012  2 19.1 
# 8/10/2012.3 8/10/2012  3 20.7 
# 8/13/2012.3 8/13/2012  3 19.5