我有一个数据框,其中某些变量(列)是阶乘,当我缺少某些记录时(na)。
问题是:
-
在阶乘变量中替换 pumputa的正确方法是什么?
例如,具有4个级别{" a"," b"," c"," d"}的V varx-用替换NAS替换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
的虚拟变量?
我的用例是之后计算主组件(所有变量都需要具有数值,因此虚拟变量)
)谢谢
感谢您澄清您的意图 - 这确实有帮助!这是我的想法:
-
推出缺失的数据是一个非平凡的问题,对于交叉验证的优秀人士来说,这是一个很好的问题。这个问题只能由您(主题专家)在项目的上下文中真正解决。一个很大的问题是,是否随机丢失了丢失值,还是作为其他一些变量的函数,以及是否观察到这些变量或未观察到这些变量。如果您得出结论认为它们是其他(观察到的)变量的函数,则甚至可以考虑使用GLM的方法。到目前为止,最简单的方法(如果您没有太多缺少的值)就是要用
mydata2 <- mydata[!is.na(TheFactorInQuestion),]
之类的内容删除这些行,我会再说一遍,丢失数据的归因是一个不平凡的问题,应该仔细考虑,并且在上下文中。也许一种好的方法是尝试一些插补方法,看看(以及您的推论如何改变)。如果它们不变(太多),您会知道您不必担心。 -
可以使用相当简单的
mydata2 <- mydata[!is.na(TheFactorInQuestion),]
进行掉落行。如果您做任何其他形式的插补(从某种意义上说,"构成"数据),我会主张在得出正确的决定之前长期努力地思考这样做。而且,当然可能是。 -
使用CBIND加入两个数据。Frames非常简单,例如
my_data2 <- cbind(my_data, my_data.dummy_vars)
。如果您需要使用因子数据删除列,则my_data3 <- my_data2[,-5]
如果因素数据在第5列中。
由虚拟变量,您是指零和一个吗?这就是我的结构方式:
# 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