Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R:合并同一变量的副本_R_Merge - Fatal编程技术网

R:合并同一变量的副本

R:合并同一变量的副本,r,merge,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

我在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,另一列为数值(没有人有两个NAs或两个数字)。我想合并这些列,得到一个Var1:(3,8,5,6)


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

您可以使用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];

这取决于存在冲突时要合并的方式

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

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

如果您只处理两列,并且从来没有两个数字或两个NAs,则可以计算行平均值并忽略缺少的值:

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

假的$fixed优雅解决方案!非常感谢。(不过,我不得不在最后一行中使用方括号,以防止R试图将var.merged和var1.copy作为函数调用。)多亏了这个陷阱,我在R和MATLAB之间切换,有时我的大脑会感到困惑。
fake$fixed <- rowMeans(fake[, c("var1", "var1.1")], na.rm=TRUE)