我正在尝试在大型数据框(大约4000个变量)中计算缺失的变量。我使用了softImp命令,但它不保留列名,但在运行代码后将它们重命名为X1 ... X4000。
fin.train是我的数据框架。
install.packages("softImute"); library(softImpute)
# Construct a training set
softImp = softImpute(as.matrix(fin.train), rank.max = 60)
data.comp = softImp$u %*% diag(softImp$d) %*% t(softImp$v)
data.comp=data.frame(data.comp)
fin.train[fin.train==NA]=data.comp[fin.train==NA]
有没有办法可以保留列名?我试图在此之后执行回归,因此我需要保持变量名称不变。
答案 0 :(得分:0)
还没有测试过(没有任何数据),但是:
fin.train[ !complete.cases(fin.train), ] = data.comp[ !complete.cases(fin.train), ]
如果名字仍然缺失,那么可能是:
colnames(fin.train) <- colnames(data.comp)
我发现自己想知道这是否有效(逻辑索引):
fin.train[ is.na(fin.train) ] <- data.comp{ is.na(fin.train) ]
或者可能转换为数字索引:
fin.train[ which( is.na(fin.train), arr.ind=TRUE) ] <-
data.comp[ which( is.na(fin.train), arr.ind=TRUE) ]