我有一个数据帧,其中一些变量(列)是阶乘的,对于某些记录我有缺失值(NA)。
问题是:
在因子变量中替换\ NAs的正确方法是什么?
例如VarX有4个级别{" A"," B"," C"," D"} - 什么是用'替换NAs的优先值? A B C D?也许只是0?也许对这个变量观察的大多数水平进行估算?
如何根据1?
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
的虚拟变量?
我的用例是事后计算主成分(需要所有变量都有数值,因此虚拟变量)
由于
答案 0 :(得分:1)
感谢您澄清您的意图 - 这真的很有帮助!以下是我的想法:
输入缺失数据是一个非常重要的问题,对于交叉验证的优秀人员来说可能是一个很好的问题。这是一个只能由您(主题专家)在项目环境中解决的问题。一个很大的问题是缺失值是随机丢失还是作为一些其他变量的函数,以及是否观察到或未观察到。如果您断定它们作为其他(观察到的)变量的函数而丢失,您甚至可能会考虑基于模型的方法,可能使用GLM。到目前为止最简单的方法(如果你没有很多缺失的值)就是用mydata2 <- mydata[!is.na(TheFactorInQuestion),]
之类的东西删除这些行我再说一遍,对缺失数据的估算是一个非常重要的问题,应该是在上下文中仔细考虑。也许一个好的方法是尝试一些插补方法,看看你的推论是否(以及如何)改变。如果他们没有改变(很多),你就会知道你不必担心。
可以使用相当简单的mydata2 <- mydata[!is.na(TheFactorInQuestion),]
来删除行。如果你做任何其他形式的估算(在某种意义上,“弥补”数据),我会主张在做出正确决定之前,长期而艰难地思考这样做。当然,它可能是。
使用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