我在R中使用了鼠标包,在我的数据中输入了一些缺失值,但不是所有变量都有。现在,如果列名相等,我想用原始数据中的列替换插补数据中的列。这是我的功能:
replace_imp <- function(data,impdata) {
for(i in 1:length(impdata)){
for(k in 1:length(data)){
if(colnames(impdata)[i]==colnames(data)[k]){
data[,k] <- imp_data[,i]
}
}
}
}
但它似乎没有用,有什么帮助吗?
答案 0 :(得分:1)
从最小数据集开始:
original <- data.frame(X=c(1, 1, 1), Y=c(2, 2, 2), Z=c(3, 3, 3))
imputed <- data.frame(A=c(2, 2, 2), Y=c(5, 5, 5), Z=c(1, 1, 1))
我们应该期望原始数据框将'Y'和'Z'列更改为估算值。让我们创建一个获取所有匹配列名的函数,对于每个匹配,我们将用推算值替换原始值。
replace_imputed <- function(original, imputed){
namestoChange <- colnames(original)[colnames(imputed) %in% colnames(original)]
for(i in 1:length(namestoChange)){
original[namestoChange[i]] <- imputed[namestoChange[i]]
}
return(original)
}
> replace_imputed(original, imputed)
X Y Z
1 1 5 1
2 1 5 1
3 1 5 1
这或多或少是你想要的吗?
答案 1 :(得分:0)
original <- data.frame(X=c(1, 1, 1), Y=c(2, 2, 2), Z=c(3, 3, 3))
imputed <- data.frame(A=c(2, 2, 2), Y=c(5, 5, 5), Z=c(1, 1, 1))
original[names(imputed)] <- imputed
X Y Z A
1 5 1 2
1 5 1 2
1 5 1 2