2017-11-25 41 views
0

我有两列GrpCHD斯普利特总计为小计不同的列下R中

Grp  CHD 
20-29  0 
20-29  1 
20-29  0 
30-34  1 
30-34  0 

一个数据帧我想生成这个新的数据帧如下

grp n  ChDP CHDA Mean 
20-29 10  1  2 0.1 
30-35 15  2  13 0.133  

其中

grp = grp
n = grp计数
CHDP =组
平均数在总(CHD = 1)组
CHDA =总(CHD = 0)= CHDP/N

如何创建该数据帧中的R?

回答

0

您可以使用aggregate创建result数据帧,然后使用tapply创建其他列。
首先,数据集。

dat <- read.table(text = " 
Grp  CHD 
20-29  0 
20-29  1 
20-29  0 
30-34  1 
30-34  0 
", header = TRUE) 

现在的代码。

result <- aggregate(CHD ~ Grp, dat, length) 
result$CHDP <- tapply(dat$CHD, dat$Grp, FUN = function(x) sum(x == 1)) 
result$CHDA <- tapply(dat$CHD, dat$Grp, FUN = function(x) sum(x == 0)) 
result$Mean <- tapply(dat$CHD, dat$Grp, FUN = function(x) mean(x == 1)) 
result 
# Grp CHD CHDP CHDA  Mean 
#1 20-29 3 1 2 0.3333333 
#2 30-34 2 1 1 0.5000000