为因子变量NAs&将它们转换为虚拟变量

时间:2017-02-24 16:48:43

标签: r dataframe dummy-variable

我有一个数据帧,其中一些变量(列)是阶乘的,对于某些记录我有缺失值(NA)。

问题是:

  1. 在因子变量中替换\ NAs的正确方法是什么?

    例如VarX有4个级别{" A"," B"," C"," D"} - 什么是用'替换NAs的优先值? A B C D?也许只是0?也许对这个变量观察的大多数水平进行估算?

  2. 如何根据1?

  3. 的答案实施这种估算
  4. 1& 2解决之后,我将使用以下内容为因子变量创建虚拟变量:

    is.fact <- sapply(my_data, is.factor)
    my_data.dummy_vars <- dummy.data.frame(my_data[, is.fact], sep = ".")
    

    之后,如何将my_data中的所有因子变量替换为我已提取到my_data.dummy_vars的虚拟变量?

  5. 我的用例是事后计算主成分(需要所有变量都有数值,因此虚拟变量)

    由于

2 个答案:

答案 0 :(得分:1)

感谢您澄清您的意图 - 这真的很有帮助!以下是我的想法:

  1. 输入缺失数据是一个非常重要的问题,对于交叉验证的优秀人员来说可能是一个很好的问题。这是一个只能由您(主题专家)在项目环境中解决的问题。一个很大的问题是缺失值是随机丢失还是作为一些其他变量的函数,以及是否观察到或未观察到。如果您断定它们作为其他(观察到的)变量的函数而丢失,您甚至可能会考虑基于模型的方法,可能使用GLM。到目前为止最简单的方法(如果你没有很多缺失的值)就是用mydata2 <- mydata[!is.na(TheFactorInQuestion),]之类的东西删除这些行我再说一遍,对缺失数据的估算是一个非常重要的问题,应该是在上下文中仔细考虑。也许一个好的方法是尝试一些插补方法,看看你的推论是否(以及如何)改变。如果他们没有改变(很多),你就会知道你不必担心。

  2. 可以使用相当简单的mydata2 <- mydata[!is.na(TheFactorInQuestion),]来删除行。如果你做任何其他形式的估算(在某种意义上,“弥补”数据),我会主张在做出正确决定之前,长期而艰难地思考这样做。当然,它可能是。

  3. 使用cbind加入两个data.frames非常简单,类似于my_data2 <- cbind(my_data, my_data.dummy_vars)。如果您需要删除包含因子数据的列,my_data3 <- my_data2[,-5],例如,如果因子数据位于第5列。

答案 1 :(得分:0)

通过虚拟变量,你的意思是零和一个?这就是我构建它的方式:

# first building a fake data frame
x <- 1:10
y <- as.factor(c("A","A","B","B","C","C",NA,"A","B","C"))
df <- data.frame(x,y)

# creating dummy variables 
df$dummy_A <- 1*(y=="A")
df$dummy_B <- 1*(y=="B")
df$dummy_c <- 1*(y=="C")

# did it work?
df
    x    y dummy_A dummy_B dummy_c
1   1    A       1       0       0
2   2    A       1       0       0
3   3    B       0       1       0
4   4    B       0       1       0
5   5    C       0       0       1
6   6    C       0       0       1
7   7 <NA>      NA      NA      NA
8   8    A       1       0       0
9   9    B       0       1       0
10 10    C       0       0       1