R"爆炸"数据帧的列

Sis*_*cia 0 r dataframe dplyr

我有一个非常有趣的问题,我正在寻找一个聪明且可能有效的解决方案.

我有一个看起来像这样的数据框.

# A tibble: 6 x 6
  track_id   tag1   tag2  tag3   tag4   tag5
     <int>  <dbl>  <dbl> <dbl>  <dbl>  <dbl>
1  1550729  54087 109806 46869 183258  54337
2  1184201 201327   3668 46208 205245 189631
3  3763749 194264 194413  3424  91383 205245
4  2674608 198998 107401  2327   4425 107398
5  1999180  54087   4425 75574 239459   2397
6  3048820  11242 205245  2474  11056  72354
Run Code Online (Sandbox Code Playgroud)

我想要的是将track_id保留在第一行但是要爆炸标签,并且在一个轨道具有特定ID的情况下,我想要设置一个真值,即一个.

为了更清楚,让我们假设我从较小的一个开始:

  track_id   tag1   tag2 
1  1550729  54087 109806 
2  1184201 201327   3668 
Run Code Online (Sandbox Code Playgroud)

转型后,我想得到类似的东西

  track_id   54087   109806  201327   3668   
1  1550729       1        1       0      0
2  1184201       0        0       1      1
Run Code Online (Sandbox Code Playgroud)

这件事可能很快就可以实现,或者我应该手工推出解决方案吗?

www*_*www 6

来自dplyr和的解决方案tidyr.

library(dplyr)
library(tidyr)

dt2 <- dt %>%
  gather(tag, value, -track_id) %>%
  select(-tag) %>%
  mutate(Occurrence = 1) %>%
  spread(value, Occurrence, fill = 0)
Run Code Online (Sandbox Code Playgroud)

数据

dt <- read.table(text = "  track_id   tag1   tag2  tag3   tag4   tag5
1  1550729  54087 109806 46869 183258  54337
2  1184201 201327   3668 46208 205245 189631
3  3763749 194264 194413  3424  91383 205245
4  2674608 198998 107401  2327   4425 107398
5  1999180  54087   4425 75574 239459   2397
6  3048820  11242 205245  2474  11056  72354",
                 header = TRUE)
Run Code Online (Sandbox Code Playgroud)