大家好, 示例:-以上是我的数据。我想对1-2岁年龄段进行分组并计算值。在此数据中,年龄组1-2的值为4。同样,我想将3-4岁年龄段分组并计算值。此处3-4岁年龄段的值为6。
如何对年龄进行分组并汇总与之对应的值?
我这样知道:代码-
data.frame(df %>% group_by(df$Age) %>% tally())
但是这些值是根据各个年龄段汇总的。 我希望在多个年龄段汇总的值成为上述示例中的一个组。
对此的任何帮助将大有帮助。 非常感谢所有人。
答案 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