0

次のようなデータフレームがあります

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
4

3 に答える 3

2

reshapeOPからの要求に応じて:(またはむしろ)を使用したソリューション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
于 2012-07-25T17:29:07.250 に答える
1

ベース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
于 2012-07-25T17:21:16.200 に答える
0

plyrを使用できます:

library(plyr)
ddply(your_data, c("ID", "name"), 
      function(df){subset(df, series == "baseline", select = "MAP")-  
        subset(df, series == "next", select = "MAP")})
于 2012-07-25T17:22:25.450 に答える