R中的许多热编码器

R中的许多热编码器,r,dataframe,R,Dataframe,我有一个数据框,如下所示,我想在本周的基础上 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

我有一个数据框,如下所示,我想在本周的基础上

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中得到这个输出吗?

我确信这可以做得更优雅,但这就完成了工作

# 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
#库
图书馆(dplyr)
图书馆(tidyr)
#数据帧
数据%
突变(周=0(“周”,周))%>%
价差(周,计数)
#将NA设置为零

df[is.na(df)]使用
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.
df%>%
变异(周=粘贴(“周”,周,九月=”)%>%
分组依据(id,周)%>%
总结(n=n())%>%
解组()%>%
价差(键=周,值=n)%>%
突变所有(funs(替换(,is.na(,0)))
#一个tibble:5x6
id周1周2周3周4周5
1  222.    0001.0
2  264.    001.01.
3  277.    01.000
4  345.    1.2.001.
5  351.    01.000

谢谢@Esben Eikhardt,但它会返回所有ID,我只希望最后有唯一的ID。哦,好吧,其他人几乎复制粘贴了我的答案,并得到了:P我很高兴你能使用他的答案。