数据集中的每月虚拟变量
Monthly Dummy Variables in dataset
我有一个包含 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
一个选项是 tabulate
然后 'MONTH' 并创建列
df[paste0("M", 1:12)] <- as.data.frame(t(sapply(df$MONTH, tabulate, 12)))
或使用 row/column
索引,其中列索引取自 'MONTH' 并将这些值从 matrix
的 0 分配给 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
我有一个包含 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
一个选项是 tabulate
然后 'MONTH' 并创建列
df[paste0("M", 1:12)] <- as.data.frame(t(sapply(df$MONTH, tabulate, 12)))
或使用 row/column
索引,其中列索引取自 'MONTH' 并将这些值从 matrix
的 0 分配给 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