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我很高兴你能使用他的答案。