我在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)。
有关如何执行此操作的任何提示?
答案 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)]