【问题标题】:Many Hot encoder in R [duplicate]R中的许多热门编码器[重复]
【发布时间】:2018-10-06 08:04:41
【问题描述】:

我有一个如下所示的数据框,我想根据周来做很多热门,

id    week
345    1
351    2
222    4
264    3
345    5
277    2
345    2
345    2
264    5
...

这是我的理想输出:

id    week1   week2    week3    week4    week5
345    1        2       0         0        1
351    0        1       0         0        0
222    0        0       0         1        0
264    0        0       1         0        1
277    0        1       0         0        0 
...

我对这个问题的想法是基于组合这个数据帧的一个热编码,但它非常复杂,

任何人都知道我可以在 R 中得到这个输出吗?

【问题讨论】:

    标签: r dataframe


    【解决方案1】:

    使用tidyverse

    df %>%
      mutate(week = paste("week", week, sep = "")) %>%
      group_by(id, week) %>% 
      summarise(n = n()) %>%
      ungroup() %>%
      spread(key = week, value = n) %>% 
      mutate_all(funs(replace(., is.na(.), 0)))
    
    # A tibble: 5 x 6
         id week1 week2 week3 week4 week5
      <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
    1  222.    0.    0.    0.    1.    0.
    2  264.    0.    0.    1.    0.    1.
    3  277.    0.    1.    0.    0.    0.
    4  345.    1.    2.    0.    0.    1.
    5  351.    0.    1.    0.    0.    0.
    

    【讨论】:

      【解决方案2】:

      我确信这可以更优雅地完成,但这可以完成工作。

      # Libraries
      library(dplyr)
      library(tidyr)
      
      # Dataframe
      data <- "id    week
      345    1
      351    2
      222    4
      264    3
      345    5
      277    2
      345    2
      345    2
      264    5"
      df <- read.table(text = data, header = TRUE)
      
      # All at once
      df <- df %>% 
        group_by(id, week) %>% 
        summarise(count = n()) %>%
        mutate(week = paste0("week", week)) %>%
        spread(week, count)
      
      # Setting NA to zero
      df[is.na(df)] <- 0
      

      【讨论】:

      • 感谢@Esben Eickhardt,但它会返回所有 id,我只想要最后唯一的 id。
      • 哦,好吧,其他人几乎复制粘贴了我的答案,并且得到了它:P 我很高兴你可以使用他的答案。
      猜你喜欢
      • 1970-01-01
      • 2019-08-12
      • 2023-04-07
      • 2017-02-08
      • 2017-11-05
      • 1970-01-01
      • 2019-07-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多