【问题标题】:Sort two rows into one row in R在R中将两行排序为一行
【发布时间】:2012-09-29 03:45:07
【问题描述】:

我有如下大型数据集:

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

【问题讨论】:

    标签: r sorting dataset


    【解决方案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
    

    【讨论】:

      【解决方案2】:
      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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-01-31
        • 2012-01-20
        • 2020-12-31
        • 2018-08-26
        • 1970-01-01
        • 2011-12-01
        相关资源
        最近更新 更多