我一直试图弄清楚融合和强制转换功能如何与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
答案 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