每个案例数据集多行到每个案例数据集的单行

时间:2014-11-11 16:43:50

标签: r reshape

我有一个数据集如下:

ikn   arrivaldate  LOS
1     06MAR2007    10
1     21FEB2007    1
2     14FEB2007    16
3     15FEB2008    23
3     02MAR2008    5
3     15MAR2008    68


data$arrivaldate <- as.Date(data$arrivaldate, format="%d%m%y")

&#34;到达日期&#34;是一个字符串变量。

我使用as.date将字符串变量转换为日期。但我得到了&#34; NA&#34;作为到达日。我不知道问题所在。

第二,是否有一种方法可以将每个案例数据集的多行转换为每个案例数据集的单行,而不是具有多个到达日期,将arrivaldate1,arrivaldate2,arrivaldate3作为新变量。这些新变量的数量应该是数据集中重复个案的最大数量(我提供的样本数据集中的3个)。

如果有人可以帮我解决这些问题,我感激不尽。

ikn  arrivaldate1  LOS1  arrivalsate2  LOS2  arrivaldate3  LOS3                      
1     06MAR2007     10    21FEB2007     1         NA         NA           
2     14FEB2007     16        NA        NA        NA         NA          
3     15FEB2008     23    02MAR2008     5      15MAR2008     68

2 个答案:

答案 0 :(得分:0)

第二个问题的答案是“不优雅”。想一想;您要求的是arrival_date1,arrival_date2,arrival_date3的列。问题:如果一个ikn只有一个到达日期怎么办?那些专栏里有什么?你最多会得到大量的NAs。

取决于你打算对数据做什么(你的例子中不太清楚 - 也许你可以解释一下?)将到达日作为与ikn结合的分类变量可能完全没问题。围绕这种格式构建了许多R库,在最坏的情况下,您可以通过dplyrdata.table之类的东西运行您想要的任何函数/分析。但是,如果不确切地知道自己想要做什么,就很难说出你需要什么(而不是你要求)。

关于重塑数据的一般问题,您可能希望查看tidyrreshape2

答案 1 :(得分:0)

使用%b%d%Y格式化日期,然后使用reshape在添加辅助“id”变量之后获取的宽数据格式。后一部分可以通过我的“splitstackshape”包中的getanID轻松完成:

library(splitstackshape)  ## for getanID

## Format the date
mydf$arrivaldate <- as.Date(mydf$arrivaldate, format="%d%b%Y")

## Reshape
reshape(getanID(mydf, "ikn"), direction = "wide", 
        idvar = "ikn", timevar = ".id")
#    ikn arrivaldate.1 LOS.1 arrivaldate.2 LOS.2 arrivaldate.3 LOS.3
# 1:   1    2007-03-06    10    2007-02-21     1          <NA>    NA
# 2:   2    2007-02-14    16          <NA>    NA          <NA>    NA
# 3:   3    2008-02-15    23    2008-03-02     5    2008-03-15    68