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-")))]

Tags:

R