【问题标题】:将 one-hot 编码数据转换为 dplyr 中的聚合
【发布时间】:2022-01-19 17:49:01
【问题描述】:

我有类似这样的年龄列是虚拟编码的。 如何汇总信息以便我可以在 dplyr 中获得计数

输入:

age_010 age_11-20 age_2130 age_3140 age_41-50 age_5160
0       1         0        0        0         0
0       0         1        0        0         0
0       0         0        1        0         0
0       1         0        0        0         0
0       0         0        0        0         1

预期输出:

age           n
age_010       0 
age_11-20     2
age_2130      1
age_3140      1
age_41-50     0 
age_5160      1

【问题讨论】:

    标签: r dplyr


    【解决方案1】:

    我们可以明智地做专栏sum

    v1 <- colSums(df1)
    data.frame(age = names(v1), n = unname(v1))
    

    -输出

     age n
    1   age_010 0
    2 age_11.20 2
    3  age_2130 1
    4  age_3140 1
    5 age_41.50 0
    6  age_5160 1
    

    如果我们想要tidyverse,请执行sum across 所有列,然后使用pivot_longer 重塑为“长”

    library(dplyr)
    library(tidyr)
    df1 %>% 
       summarise(across(everything(), sum)) %>%
       pivot_longer(cols = everything(), names_to = 'age', values_to = 'n')
    # A tibble: 6 × 2
      age           n
      <chr>     <int>
    1 age_010       0
    2 age_11.20     2
    3 age_2130      1
    4 age_3140      1
    5 age_41.50     0
    6 age_5160      1
    

    数据

    df1 <- structure(list(age_010 = c(0L, 0L, 0L, 0L, 0L), age_11.20 = c(1L, 
    0L, 0L, 1L, 0L), age_2130 = c(0L, 1L, 0L, 0L, 0L), age_3140 = c(0L, 
    0L, 1L, 0L, 0L), age_41.50 = c(0L, 0L, 0L, 0L, 0L), age_5160 = c(0L, 
    0L, 0L, 0L, 1L)), class = "data.frame", row.names = c(NA, -5L
    ))
    

    【讨论】:

      猜你喜欢
      • 2018-01-26
      • 1970-01-01
      • 2023-03-13
      • 2020-11-21
      • 2019-09-27
      • 2022-01-22
      • 1970-01-01
      • 2017-07-27
      • 1970-01-01
      相关资源
      最近更新 更多