首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >根据R中的两个参数计算元素数

根据R中的两个参数计算元素数
EN

Stack Overflow用户
提问于 2020-11-11 00:21:48
回答 2查看 41关注 0票数 0

要使用的数据集:

代码语言:javascript
复制
df <- tibble::tribble(~person, ~age, ~height,  
                      "John", 1, 20,  
                      "Mike", 3, 50,  
                      "Maria", 3, 52,  
                      "Elena", 6, 90,  
                      "Biden", 9, 120)

我正在尝试获得一个具有以下结构的data frame

代码语言:javascript
复制
age | height(cm) | number of people  
0-5 | 0-50       |  2  
0-5 | 50-100     |  1  
0-5 | 100-200    |  0  
5-10 | 0-50       |  0  
5-10 | 50-100     |  1  
5-10 | 100-200    |  1

基本上,我有一个数据集,其中包含关于特定数量的人的大量信息。我想首先根据他们的年龄对其进行分类,并在每个年龄组中有一个身高组,最后是属于这些类别的人数。

有什么建议吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-11-11 00:38:36

您可以使用cut()从连续变量生成bin,然后总结新的类别。

代码语言:javascript
复制
library(dplyr)

df %>%
  mutate(
    age_c = cut(
      age,
      breaks = c(-Inf, 5, 10),
      labels = c("0-5", "5-10"),
      right = TRUE
    ),
    height_c = cut(
      height,
      breaks = c(-Inf, 50, 100, 200),
      labels = c("0-50", "50-100", "100-200"),
      right = TRUE
    )
  ) %>%
  count(age_c, height_c, .drop = FALSE)

# A tibble: 6 x 3
  age_c height_c     n
  <fct> <fct>    <int>
1 0-5   0-50         2
2 0-5   50-100       1
3 0-5   100-200      0
4 5-10  0-50         0
5 5-10  50-100       1
6 5-10  100-200      1
票数 2
EN

Stack Overflow用户

发布于 2020-11-11 00:41:45

在base R中,你可以这样做:

代码语言:javascript
复制
data.frame(with(df, table(age=cut(age, c(0,5,10)), height=cut(height, c(0,50,100,200)))))

     age    height Freq
1  (0,5]    (0,50]    2
2 (5,10]    (0,50]    0
3  (0,5]  (50,100]    1
4 (5,10]  (50,100]    1
5  (0,5] (100,200]    0
6 (5,10] (100,200]    1
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64772711

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档