【问题标题】:Replace column if the same column name R如果列名相同,则替换列 R
【发布时间】:2016-04-03 17:32:14
【问题描述】:

我在 R 中使用了 mouse 包来估算我的数据中的一些缺失值,但不是针对所有变量。现在,如果它们的列名相同,我想用估算数据中的列替换原始数据中的列。这是我的功能:

 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]
      }
    }
  }
}

但它似乎不起作用,有什么帮助吗?

【问题讨论】:

  • 你见过this answer吗?如果这对您没有帮助,我建议您制作一个可重复的最小示例来解决您的问题。我们可以使用和使用的东西向您展示如何解决您的问题。您可以查看this SO post,了解如何在 R 中制作一个出色的可重现示例。

标签: r missing-data r-mice imputation


【解决方案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

这或多或少是您想要的吗?

【讨论】:

  • 谢谢,这正是我需要的!不知何故定义 namestoChange 对我不起作用,可能是因为我的估算数据框有另一个维度,但我刚刚将其定义为 namestoChange &lt;- colnames(imputed)
  • 很高兴我能帮上忙 :)
  • 我会小心一点,并记住,您的数据需要采用完全相同的排序顺序才能有用。我用它来替换具有相同变量名的数据,但由于新数据的顺序与旧数据的顺序不同,我最终将数据打乱了。因此,出于我的需要,我使用了合并并删除了 .x 变量(然后从变量名中删除了 .y)。
【解决方案2】:
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   

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-18
    • 1970-01-01
    • 2022-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多