【问题标题】:Monthly Dummy Variables in dataset数据集中的每月虚拟变量
【发布时间】:2018-10-23 16:10:44
【问题描述】:

我有一个包含 10 列的数据集。其中一列是日期。我想为每个月创建虚拟变量。我该怎么做呢?

      Date     Col1     Col2  
2017-01-09        v        2
2017-05-01        s        7
2018-03-02        k        9

我可以使用 lubridate 提取月份:

df$MONTH<-month(df$Date)

      Date     Col1     Col2     MONTH
2017-01-09        v        2         1
2017-05-01        s        7         5
2018-03-02        k        9         3

如何将其转换为将每个月的虚拟变量绑定到原始变量?

      Date     Col1     Col2    M1   M2   M3   M4   M5   M6   M7   M8   M9   M10    M11   M12
2017-01-09        v        2     1    0    0    0    0    0    0    0    0   0        0     0
2017-05-01        s        7     0    0    0    0    1    0    0    0    0   0        0     0
2018-03-02        k        9     0    0    1    0    0    0    0    0    0   0        0     0

【问题讨论】:

    标签: r lubridate dcast


    【解决方案1】:

    一个选项是 tabulate 在 'MONTH' 并创建列

    df[paste0("M", 1:12)] <- as.data.frame(t(sapply(df$MONTH, tabulate, 12)))
    

    或者使用 row/column 索引,其中列索引取自“MONTH”,并将这些值从 0 的 matrix 分配到 1

    m1 <- matrix(0, nrow(df), 12)
    m1[cbind(seq_len(nrow(df)), df$MONTH)] <- 1
    df[paste0("M", 1:12)] <- m1
    df
    #        Date Col1 Col2 MONTH M1 M2 M3 M4 M5 M6 M7 M8 M9 M10 M11 M12
    #1 2017-01-09    v    2     1  1  0  0  0  0  0  0  0  0   0   0   0
    #2 2017-05-01    s    7     5  0  0  0  0  1  0  0  0  0   0   0   0
    #3 2018-03-02    k    9     3  0  0  1  0  0  0  0  0  0   0   0   0
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-01-24
      • 2018-10-06
      • 1970-01-01
      • 2015-06-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多