我是R的新手,我真的陷入困境,这对你来说似乎很容易。我有一个数据框,其中包含大量数据,如AGE,这与特定的人有关,因此会重复。我不得不把它分成范围,看看每组中有多少人。所以我有这个 `
[,1]
(1,23] 5912
(23,26] 5579
(26,28] 3314
(28,33] 6693
(33,37] 4682
(37,41] 4514
(41,46] 5169
(46,51] 4812
(51,57] 4236
(57,76] 4031`
现在我有另一个G / B栏,表明这个人是不好还是好(分别为1,0) 需要计算1和0中有多少,即不好和坏,每个不同年龄的人群。 所以数据应该像
Total Bad Good
`(1,23] 5912 2912 3000 `.
等。 希望得到这个帮助。
答案 0 :(得分:2)
可能你可以试试
library(data.table)
setDT(dat1)[,list(Total=.N, Bad=sum(GB), Good=sum(!GB)), keyby=range]
# range Total Bad Good
# 1: (0,1] 16 7 9
# 2: (1,23] 257 132 125
# 3: (23,26] 29 16 13
# 4: (26,28] 19 8 11
# 5: (28,33] 60 34 26
# 6: (33,37] 52 30 22
# 7: (37,41] 41 19 22
# 8: (41,46] 56 25 31
# 9: (46,51] 65 27 38
#10: (51,57] 57 28 29
#11: (57,76] 196 110 86
#12: (76,85] 101 44 57
#13: (85,100] 51 24 27
或使用dplyr
library(dplyr)
dat1 %>%
group_by(range) %>%
summarise(Total=n(), Bad=sum(GB), Good=sum(!GB))
或使用aggregate
base R
res <- do.call(`data.frame`,aggregate(GB~range, dat1,
FUN=function(x) c(length(x), sum(x), sum(!x))))
set.seed(42)
dat <- data.frame(AGE= sample(1:90, 1000, replace=TRUE),
GB=sample(0:1, 1000, replace=TRUE))
dat1 <- transform(dat, range=cut(AGE,
breaks=c(0,1,23,26,28,33,37,41,46,51,57,76,85,100)))