R:合并同一变量的副本

时间:2012-03-06 02:51:01

标签: r merge

我在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)。

有关如何执行此操作的任何提示?

3 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分: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];

答案 2 :(得分:2)

如果存在冲突,则取决于您想要合并的方式。

您只需将var.1.1中的所有非NA值放入var1的相应广告位即可。如果发生冲突,这将有利于var.1.1

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

您只需在var1中填写相应值var1.1的所有NA值即可。如果发生冲突,这将有利于var1

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