按因子拆分并组合成新列

时间:2012-08-14 14:48:24

标签: r

我有一个sql输出到data.frame,如下所示:

  dateTime              resultMean           SensorDescription
1 2009-01-09 21:35:00   7.134589             Aanderaa Optode - Type 3835
2 2009-01-09 21:35:00   7.813000         Seabird SBE45 Thermosalinograph
3 2009-01-09 21:35:00   8.080399 Turner SCUFA II Chlorophyll Fluorometer
4 2009-01-09 21:35:00   7.818604                          ADAM PT100 PRT
5 2009-01-09 21:36:00   7.818604                          ADAM PT100 PRT

我想把它变成这样的框架:

  dateTime              Aanderaa Optode - Type 3835  Seabird SBE45 Thermosalinograph   Turner SCUFA II Chlorophyll Fluorometer   ADAM PT100 PRT               
1 2009-01-09 21:35:00   7.134589                     7.813000                          8.080399                                  7.818604

目前我有一个按SensorDescription拆分的功能,然后通过合并循环遍历列表。 使用内置函数有更好的方法吗?我看过plyr,ddply等没什么接缝可以做我想要的。

当前的合并循环函数如下所示:

    listmerge = function(datalist){
    mdat = datalist[[1]][1:2]
    for(i in 2:length(datalist)){
        mdat = join(mdat,datalist[[i]][1:2], by="dateTime", match = "all")
    }

1 个答案:

答案 0 :(得分:3)

您可以使用dcast包中的reshape2

d <- data.frame(x=1, y=letters[1:10], z=runif(10))
dcast(x ~ y, data=d)
Using z as value column: use value.var to override.
  x         a         b         c         d         e         f         g         h        i        j
1 1 0.7582016 0.4000201 0.5712599 0.9851774 0.9971331 0.2955978 0.9895403 0.6114973 0.323996 0.785073
基础统计包中的

reshape也可以实现这一点,但语法有点困难。

reshape(d, idvar='x', timevar='y', direction='wide')

  x       z.a       z.b       z.c       z.d       z.e       z.f       z.g       z.h      z.i      z.j
1 1 0.7582016 0.4000201 0.5712599 0.9851774 0.9971331 0.2955978 0.9895403 0.6114973 0.323996 0.785073