【问题标题】:How to create dynamic dummy variables in SQL如何在 SQL 中创建动态虚拟变量
【发布时间】:2014-11-25 05:00:21
【问题描述】:

我有一个简单的表,有 2 列:ID(整数)和类别(字符串),每个 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 否。独特的类别。

我的问题是:

a) 如果它不是未知的或真的很大怎么办?如何自动创建这种“CASE WHEN”效果?

b) 更重要的是:我不一定对所有类别感兴趣(比如只对“A”和“B”的虚拟对象)感兴趣,而只对我在一个名为 Cats 的单独表中的类别感兴趣,这是一个简单的 1 列我的相关类别(同样,不知道有多少),例如:

 Cat
 ---
 A
 B

如何仅为此动态表中的类别创建虚拟变量?

您认为所有这些都应该在其他工具中完成吗?吗?

谢谢!

(我将 Teradata SQL 与 SQLA 一起使用,但我认为这是一个一般性的 SQL 问题)

【问题讨论】:

    标签: sql r teradata reshape


    【解决方案1】:

    只需使用table:

    table(dat)
       Cat
    ID  A B C
      1 1 1 0
      2 0 1 0
      3 1 1 1
    

    如果你想要一组猫的二进制表:

    table(subset(dat,Cat %in% c('A','B')))
       Cat
    ID  A B
      1 1 1
      2 0 1
      3 1 1
    

    【讨论】:

    • @RicardoSaporta,你没看到我删除的答案吗?
    • @agstudy 谢谢,但我在问这是否可以在 SQL 中完成。
    猜你喜欢
    • 2012-09-27
    • 2023-03-27
    • 2017-04-23
    • 2023-03-24
    • 1970-01-01
    • 2020-04-03
    • 1970-01-01
    • 1970-01-01
    • 2018-04-06
    相关资源
    最近更新 更多