Group value in range r
Using dplyr
, you can create (mutate
) a new column indicating in which interval the value belongs (using cut
) and then use this column to group your values and count (n()
) how many of them you have:
library(dplyr)
df %>% mutate(cuts = cut(value, c(0, 20, 30, Inf))) %>%
group_by(cuts) %>%
summarize(n=n())
# cuts n
# (fctr) (int)
# 1 (0,20] 2
# 2 (20,30] 1
# 3 (30,Inf] 3
Here is a full solution, including your sample data:
df <- data.frame(name=c("r", "h", "s", "l", "e", "m"), value=c(35,20,16,40,23,40))
# get categories
df$groups <- cut(df$value, breaks=c(0,21,30,Inf))
# calculate group counts:
table(cut(df$value, breaks=c(0,21,30,Inf)))
If Inf is a little too extreme, you can use max(df$value)
instead.
We can use
library(data.table)
setDT(input)[,.(num=.N) ,
.(range=cut(value, breaks = c(0,20, 30, Inf), labels = c("0-20", "21-30", "30-")))]