1

我有如下大型数据集:

myd <- data.frame (var1 = c("A", "A", "B1-1", "B1-1", "C", "C", "D1", "D1"),
                   var2 = c(1,    2,    2,       2,     3,  1,   1,    4))
 var1 var2
1    A    1
2    A    2
3 B1-1    2
4 B1-1    2
5    C    3
6    C    1
7   D1    1
8   D1    4

请注意,var1 中的每个级别重复两次,并且在 var2 中有两个值。

对于 var1 的每个级别,我想创建一个新数据集,其中 var2 值现在按行排列(缩短)并合并为一列,输出类型如下:

   var1    var2.h1 var2.h2      h1.h2  
1    A      1         2           12
2   B1-1    2         2           22
3    C      1         3           13
4   D1      1         4           14
4

2 回答 2

1
library(plyr)
ddply(myd, .(var1), function(x) {
     foo <- data.frame(rbind(x$var2), sprintf("%s%s", x$var2[1], x$var2[2]))
     names(foo) <- c("var2.h1", "var2.h2", "h1.h2")
     foo
    })

var1 var2.h1 var2.h2 h1.h2
1    A       1       2    12
2 B1-1       2       2    22
3    C       3       1    31
4   D1       1       4    14
于 2012-10-08T21:29:45.030 回答
1
library("reshape2")
myd$pos <- c("h1", "h2")
myd.wide <- dcast(myd, var1~pos, value.var="var2")
names(myd.wide)[2:3] <- paste("var2", names(myd.wide)[2:3], sep=".")
myd.wide$h1.h2 <- paste0(myd.wide$var2.h1, myd.wide$var2.h2)

这使

> myd.wide
  var1 var2.h1 var2.h2 h1.h2
1    A       1       2    12
2 B1-1       2       2    22
3    C       3       1    31
4   D1       1       4    14
于 2012-10-08T21:45:08.283 回答