R:如何在数据帧的不同列中找到相应的值

时间:2014-11-26 11:44:21

标签: r dataframe

我是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 `.

等。 希望得到这个帮助。

1 个答案:

答案 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)))