我有一个包含2列的简单表:ID(整数)和Category(字符串),每个ID可以重复几个类别,如下所示:
ID Cat
--- ---
1 A
1 B
2 B
3 A
3 B
3 C
我想重塑这个表,以便每个唯一的类别都是一个虚拟变量(如果ID有,则为0/1):
ID A B C
--- -- -- --
1 1 1 0
2 0 1 0
3 1 1 1
现在,如果已知(和小)这组唯一类别,则这是一个简单的CASE WHEN语句x no。独特的类别。
我的问题是:
a)如果它不是未知或真的很大怎么办?如何自动创建“CASE WHEN”效果?
b)更重要的是:我不一定对所有类别感兴趣(仅说'A'和'B'的假人),但只有我在一个名为Cats的单独表中的类别,这是一个简单的1列保持我的相关类别(再次,未知有多少),如: Cat
---
A
B
如何仅为此动态表中的类别创建虚拟变量?
你认为所有这一切都应该在其他工具中完成,例如R'
谢谢!
(我正在使用带有SQLA的Teradata SQL,但我认为这是一个普遍的SQL问题)
答案 0 :(得分:2)
只需使用table
:
table(dat)
Cat
ID A B C
1 1 1 0
2 0 1 0
3 1 1 1
如果你想拥有一组Cat的二进制表:
table(subset(dat,Cat %in% c('A','B')))
Cat
ID A B
1 1 1
2 0 1
3 1 1