【问题标题】:R: merging copies of the same variableR:合并相同变量的副本
【发布时间】:2012-03-06 02:51:01
【问题描述】:

我在 R 中有这样的数据:

subjID = c(1,2,3,4)
var1 = c(3,8,NA,6)
var1.copy = c(NA,NA,5,NA)
fake = data.frame(subjID = subjID, var1 = var1, var1 = var1.copy)

看起来像这样:

> fake
  subjID var1 var1.1
1      1    3     NA
2      2    8     NA
3      3   NA      5
4      4    6     NA

Var1 和 Var1.1 代表同一个变量,因此每个受试者的一列有 NA,另一列有一个数值(没有人有两个 NA 或两个数字)。我想合并列以获得单个 Var1: (3, 8, 5, 6)。

关于如何做到这一点的任何提示?

【问题讨论】:

    标签: r merge


    【解决方案1】:

    如果您只处理两列,并且从不两个数字或两个 NA,您可以计算行均值并忽略缺失值:

    fake$fixed <- rowMeans(fake[, c("var1", "var1.1")], na.rm=TRUE)
    

    【讨论】:

      【解决方案2】:

      你可以使用 is.na,它可以被向量化为:

      # get all the ones we can from var1
      var.merged = var1;
      # which ones are available in var1.copy but not in var1?
      ind = is.na(var1) & !is.na(var1.copy);
      # use those to fill in the blanks
      var.merged[ind] = var1.copy[ind];
      

      【讨论】:

      • 优雅的解决方案!谢谢你。 (不过,我必须在最后一行使用方括号,以防止 R 尝试将 var.merged 和 var1.copy 作为函数调用。)
      • 感谢您的关注,我在 R 和 MATLAB 之间切换,有时我的大脑会感到困惑。
      【解决方案3】:

      如果有冲突,这取决于你想如何合并。

      您可以简单地将var.1.1 中的所有 个非NA 值放入var1 的相应槽中。如果发生冲突,这将有利于var.1.1

      var1[!is.na(var1.copy)] <- var1.copy[!is.na(var1.copy)]
      

      您可以将var1 中的所有NA 值填入对应的var1.1 值。如果发生冲突,这将有利于var1

      var1[is.na(var1)] <- var1.copy[is.na(var1)]
      

      【讨论】:

        猜你喜欢
        • 2010-12-12
        • 1970-01-01
        • 2023-04-06
        • 2018-04-29
        • 2016-05-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多