首页 > 解决方案 > 仅将缺失的信息解释为虚拟变量 R

问题描述

在下面的示例数据框中(原始由数千行和数百列组成),Date1 和 Date2 中的某些值是未知的,它们不需要相关:

Data_Frame <- data.frame(ID = c("A1", "A2", "A3", "A4", "A5", "A6", "A7", "A8", "A9", "A10"), 
                         
                         Date1 = c("2010-08-03", "2012-11-28", "2009-12-13", "2000-01-15", "2003-03-01", "2015-05-09", "2020-07-11", "unknown", "2011-01-04", "unknown"),
                         
                         Value = c(2.86, 3.43, 4.65, 6.91, -2.22, 9.92, 23.41, -0.032, 8.84, 10.11),
                         
                         Date2 = c("unknown", "2015-10-22", "2019-02-14", "2010-11-25", "unknown", "2017-03-12", "2019-09-12", "unknown", "2021-05-14", "2012-08-20"))

我想避免插补,因为它会产生许多人工日期值。此外,为了避免为列中的每个日期值创建虚拟变量(它们以千为单位,并且数据框的大小将迅速增加),创建两列是否有意义,其中 1 是所有日期的条目第二列中不是未知的值,未知值为 0,反之亦然,如下所示:

Data_Frame <- add_column(Data_Frame, Date11 = ifelse(Data_Frame$Date1 != 'unknown', 1, 0), .after = "Date1")
Data_Frame <- add_column(Data_Frame, Date12 = ifelse(Data_Frame$Date1 == 'unknown', 1, 0), .after = "Date11")

Data_Frame <- add_column(Data_Frame, Date21 = ifelse(Data_Frame$Date2 != 'unknown', 1, 0), .after = "Date2")
Data_Frame <- add_column(Data_Frame, Date22 = ifelse(Data_Frame$Date2 == 'unknown', 1, 0), .after = "Date21")

这使

在此处输入图像描述

在分析中使用 Date11、Date12、Date21 和 Date22 并删除 Date1 和 Date2 是否有意义?我相信这是错误的。例如,如果在数据预处理期间必须处理因子列中的一个级别以生成虚拟变量而不是所有条目(以避免额外的列)以避免信息丢失,那么如何处理这样的问题?

标签: rdataframemissing-datadummy-variabledata-preprocessing

解决方案


您可以一次处理所有"^Date"列。将+(.)逻辑结果强制为整数,as.integer(.)但您也可以这样说。

res <- data.frame(Data_Frame, 
                  +(Data_Frame[grep('^Date', names(Data_Frame))] == 'unknown'))
res
#     ID      Date1  Value      Date2 Date1.1 Date2.1
# 1   A1 2010-08-03  2.860    unknown       0       1
# 2   A2 2012-11-28  3.430 2015-10-22       0       0
# 3   A3 2009-12-13  4.650 2019-02-14       0       0
# 4   A4 2000-01-15  6.910 2010-11-25       0       0
# 5   A5 2003-03-01 -2.220    unknown       0       1
# 6   A6 2015-05-09  9.920 2017-03-12       0       0
# 7   A7 2020-07-11 23.410 2019-09-12       0       0
# 8   A8    unknown -0.032    unknown       1       1
# 9   A9 2011-01-04  8.840 2021-05-14       0       0
# 10 A10    unknown 10.110 2012-08-20       1       0

推荐阅读