在范围 r 中对组值进行分类

10
我有一个表格(输入)。
name   value
Rob    35
Helen  20
Sergey 16
Linn   40
Elena  23
Mary   40

我希望能够统计我的用户中有多少人在自定义范围内(0-20、21-30和>30)(输出):

range  num
0-20   2
21-30  1
30-    3 

谢谢!如果这个主题不是新的,抱歉我找不到答案!

3个回答

9
使用 dplyr,您可以创建(mutate)一个新列,指示值属于哪个间隔(使用 cut),然后使用此列对值进行分组并计算 (n()) 有多少个值:
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

7

以下是一个完整的解决方案,包括您提供的示例数据:

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

如果Inf有点过于极端,你可以使用max(df$value)代替。

2
我们可以使用
library(data.table)
setDT(input)[,.(num=.N) ,
  .(range=cut(value, breaks = c(0,20, 30, Inf), labels = c("0-20", "21-30", "30-")))]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接