在R中的不同列下将Total拆分为小计

时间:2017-11-25 17:57:05

标签: r dataframe

我的数据框有两列GrpCHD

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?

中创建此数据框

1 个答案:

答案 0 :(得分: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