如何基于R中的某些条件和总和对多行进行分组?

时间:2018-12-01 06:14:16

标签: r


data snapshot


大家好, 示例:-以上是我的数据。我想对1-2岁年龄段进行分组并计算值。在此数据中,年龄组1-2的值为4。同样,我想将3-4岁年龄段分组并计算值。此处3-4岁年龄段的值为6。

如何对年龄进行分组并汇总与之对应的值?

我这样知道:代码-

data.frame(df %>% group_by(df$Age) %>% tally())

但是这些值是根据各个年龄段汇总的。 我希望在多个年龄段汇总的值成为上述示例中的一个组。

对此的任何帮助将大有帮助。 非常感谢所有人。

2 个答案:

答案 0 :(得分:1)

这是使用基数R中的dplyr?cut的一种方法-

df <- data.frame(age = c(1,1,2,2,3,3,3,4,4,4),
                 Name = letters[1:10],
                 stringsAsFactors = F)

df %>% 
  count(grp = cut(age, breaks = c(0,2,4)))

# A tibble: 2 x 2
  grp       n
  <fct> <int>
1 (0,2]     4
2 (2,4]     6

答案 1 :(得分:1)

这里有两个解决方案,分别是基数R和包dplyr
我将使用Shree发布的数据。

第一,以R为基。
我先创建一个分组变量grp,然后在其上创建aggregate

grp <- with(df, c((age %in% 1:2) + 2*(age %in% 3:4)))
aggregate(age ~ grp, df, length)
#  grp age
#1   1   4
#2   2   6

第二一种dplyr方式。
函数case_when用于创建分组变量。这样可以轻松地为组指定有意义的名称。

library(dplyr)

df %>%
  mutate(grp = case_when(
    age %in% 1:2 ~ "2:3",
    age %in% 3:4 ~ "3:4",
    TRUE ~ NA_character_
  )) %>%
  group_by(grp) %>%
  tally()
## A tibble: 2 x 2
#  grp       n
#  <chr> <int>
#1 1:2       4
#2 3:4       6