使用R中的reshape2重塑数据

时间:2014-12-14 12:13:36

标签: r casting reshape2 melt

我一直试图弄清楚融合和强制转换功能如何与reshape2包一起使用。但是无法获得我正在寻找的结果。

见下数据:

data <- read.table(header=T, text="
  diagnosis  agrp   events  Period
  COPD  1   16  1998-1999
  COPD  2   51  1998-1999
  COPD  3   27  1998-1999
  COPD  4   9   1998-1999
  COPD  1   44  2000-2001
  COPD  2   122 2000-2001
  COPD  3   39  2000-2001
  COPD  4   12  2000-2001")

继承人试图实现的目标

diagnosis   agrp    1998-1999   2000-2001   etc...
  COPD      1          16        44
  COPD      2          51        12
  COPD      3          27        39
  COPD      4          9         12

我希望转置数据,以便&#34;期间&#34;成为自己的专栏。实现这一目标的足够代码将受到高度赞赏!

更新

这就是我的数据:

     data <- read.table(header=T, text="
 diagnosis  agrp    1998-1999   2000-2001
KONTROLL    1     140903      72208
KONTROLL    2     88322       33704
KONTROLL    3     18175       3804
KONTROLL    4     6125        797")

这就是我想要实现的目标:

 diagnosis  agrp    1998-1999   2000-2001   Total
KONTROLL    1     140903       72208        213111
KONTROLL    2     88322        33704        122026
KONTROLL    3     18175        3804       21979
KONTROLL    4      6125         797         6922

1 个答案:

答案 0 :(得分:3)

尝试

reshape(data, idvar=c('diagnosis', 'agrp'),
              timevar='Period', direction='wide')
#   diagnosis agrp events.1998-1999 events.2000-2001
#1      COPD    1               16               44
#2      COPD    2               51              122
#3      COPD    3               27               39
#4      COPD    4                9               12

或使用reshape2

library(reshape2)
dcast(data, diagnosis+agrp~Period, value.var='events')
#    diagnosis agrp 1998-1999 2000-2001
#1      COPD    1        16        44
#2      COPD    2        51       122
#3      COPD    3        27        39
#4      COPD    4         9        12

或者

library(tidyr)
spread(data, Period, events)
#   diagnosis agrp 1998-1999 2000-2001
#1      COPD    1        16        44
#2      COPD    2        51       122
#3      COPD    3        27        39
#4      COPD    4         9        12

更新

基于新数据

  transform(data, Total=rowSums(data[,3:4]), check.names=FALSE)
  #  diagnosis agrp 1998-1999 2000-2001  Total
  #1  KONTROLL    1    140903     72208 213111
  #2  KONTROLL    2     88322     33704 122026
  #3  KONTROLL    3     18175      3804  21979
  #4  KONTROLL    4      6125       797   6922