【发布时间】:2023-01-03 01:43:52
【问题描述】:
我有一个看起来像这样的数据集。每个事件都有 1-3 个标签,标签中列出了颜色。所有颜色都可以出现在 3 个标签列中的任何一个中。一个项目可以有多个事件。
> data.frame(item = c(1,1,2,3,4,4,4,5), event = seq(1,8),
+ tag1 = c("red","red","blue","green","red","yellow","black","purple"),
+ tag2 = c("blue","NA","NA","yellow","orange","NA","purple","red"),
+ tag3 = c("NA","NA","NA","red","magenta","NA","red","green"))
item event tag1 tag2 tag3
1 1 1 red blue NA
2 1 2 red NA NA
3 2 3 blue NA NA
4 3 4 green yellow red
5 4 5 red orange magenta
6 4 6 yellow NA NA
7 4 7 black purple red
8 5 8 purple red green
我想要做的是转换数据,以便每个项目都有一行,然后,每种可能的颜色都有一列,值是该项目是否曾被标记过。
例如:
| Item| Red | Blue | Green | etc |
| 1 | 1 | 1 | 0 | 0 |
| 2 | 0 | 0 | 1 | 0 |
我不想手动创建列,因为在我的实际代码中,大约有 800 种不同的“颜色”。
我正在与 tidyverse 合作尝试解决这个问题,但我对其他使它更容易的软件包开放。
运行时确实很重要,因为我在数据集中有超过 1000 万个事件。
【问题讨论】: