【问题标题】:cast, join and reduce data with reshape使用 reshape 强制转换、连接和减少数据
【发布时间】:2012-07-25 17:04:42
【问题描述】:

我有一个看起来像的数据框

MAP  name       series    ID
1.0  aspartame  baseline  902349
1.0  aspartame  baseline  82749
1.0  aspartame  baseline  928542
1.0  aspartame  next      928542
0.8  aspartame  next      82749
0.8  aspartame  next      902349

我想在 ID 上加入这些数据并计算差异 在 MAP 分数中的基线和下一个之间。所以这应该给

diff name       ID
0.2  aspartame  902349
0.2  aspartame  82749
0.0  aspartame  928542

【问题讨论】:

    标签: r reshape


    【解决方案1】:

    根据 OP 的要求:使用reshape(或者更确切地说是reshape2)的解决方案。

    d <- read.table(text = "
    MAP  name       series    ID
    1.0  aspartame  baseline  902349
    1.0  aspartame  baseline  82749
    1.0  aspartame  baseline  928542
    1.0  aspartame  next      928542
    0.8  aspartame  next      82749
    0.8  aspartame  next      902349", header = TRUE)
    
    require(reshape2)
    
    dcast(data = d, formula = ID  + name~ ., value.var = "MAP", 
          fun.aggregate = function(x) (x[1] - x[2]))
    

    给予

          ID      name  NA
    1  82749 aspartame 0.2
    2 902349 aspartame 0.2
    3 928542 aspartame 0.0
    

    【讨论】:

      【解决方案2】:

      这是基础 R 中的一种方式(假设您的 data.frame 被命名为 df):

      aggregate(list(MAP = df$MAP), 
                by=list(ID = df$ID, name = df$name), 
                function(x) x[1] - x[2])
      #       ID      name MAP
      # 1  82749 aspartame 0.2
      # 2 902349 aspartame 0.2
      # 3 928542 aspartame 0.0
      

      【讨论】:

        【解决方案3】:

        你可以使用 plyr:

        library(plyr)
        ddply(your_data, c("ID", "name"), 
              function(df){subset(df, series == "baseline", select = "MAP")-  
                subset(df, series == "next", select = "MAP")})
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-02-11
          • 1970-01-01
          • 2011-11-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-01-29
          相关资源
          最近更新 更多