我试图用missForest
中可用的非参数方法在我的数据框中计算缺失值。我的数据(OneDrive链接)由一个分类变量和五个连续变量组成。
head(data)
phylo sv1 sv2 sv3 sv4 sv5
1 Phaon_camerunensis 6.03803 NA 5121.257 NA 70
2 Umma_longistigma 6.03803 NA 5121.257 NA 53
3 Umma_longistigma 6.03803 NA 5121.257 NA 64
4 Umma_longistigma 6.03803 NA 5121.257 NA 63
5 Sapho_ciliata 6.03803 NA 5121.257 NA 63
6 Sapho_gloriosa 6.03803 NA 5121.257 NA 63
我第一次使用missForest()
是成功的
imp<- missForest(data[2:6])
然而,不是在整个数据矩阵(或向量?我想通过phylo
来推算缺失的值。
我尝试了data[2:6] %>% group_by(phylo) %>%
和sapply(split(data[2:6], data$phylo)) %>%
,但没有成功。
你知道怎么处理吗?
如果您想为每个组运行missForest
,您可以使用group_map
:
imp <- df %>% group_by(phylo) %>% group_map(~ missForest(.))
只从结果中获取第一项:
imp2 <- t(sapply(imp, "[[", 1))
虽然问题不是很清楚,但我假设您希望根据phylo
变量估算数据集的子集。为此,你需要按因子变量拆分数据集,并在每个子集上应用输入函数。这可以只使用R基函数来实现:
# convert phylo to factor
data$phylo <- as.factor(data$phylo)
# split and impute according to each level
data2 <-lapply(split(data,as.factor(data$phylon)), function(x) missForest::missForest(data))
# display the imputed dataset
data2$ximp