2015-03-31 38 views
2

我有例如向量这样的:合并中的R多种载体删除NAS

a= c(1, NA, NA, 2, 3) 
b=c(NA, 1, NA, NA, NA) 
c=c(NA, NA, 5, NA, NA) 

我要合并三个矢量获得

d=c(1,1,5,2,3) 

是否有这样做的一种方式没有广泛的循环?非常感谢:)

+0

如果在多个向量中的相同位置有值,该怎么办? – A5C1D2H2I1M1N2O1R2T1 2015-03-31 16:09:36

+0

在我的所有媒介之间,每个位置应该只有一个值,其余的应该是NA。 – Coldfusion 2015-03-31 16:10:42

+0

[This](http://stackoverflow.com/q/19253820/324364)可能会有所帮助。 – joran 2015-03-31 16:11:13

回答

2

你可以尝试

rowSums(cbind(a,b,c), na.rm=TRUE) 
#[1] 1 1 5 2 3 

mat <- cbind(a,b,c) 
mat[cbind(1:nrow(mat),max.col(!is.na(mat)))] 
#[1] 1 1 5 2 3 

或者

ind <- which(!is.na(mat), arr.ind=TRUE) 
mat[ind[order(ind[,1]),]] 
#[1] 1 1 5 2 3 
+0

这很完美,非常感谢:) – Coldfusion 2015-03-31 16:14:46

+0

是的,我试过了,但它说我不得不再等7分钟:P – Coldfusion 2015-03-31 16:29:01

+0

@ Coldfusion谢谢你通知我。 – akrun 2015-03-31 16:29:31

2

我会考虑pminpmax为给你描述的情况更直接的方式:

pmin(a, b, c, na.rm = TRUE) 
# [1] 1 1 5 2 3 
pmax(a, b, c, na.rm = TRUE) 
# [1] 1 1 5 2 3 
+0

我忘了pmin/pmax。感谢您的展示。 – akrun 2015-03-31 16:27:45

+0

@akrun,谢谢。我认为你的方法仍然会更快 - 我认为'rowSums'已经非常优化了。哦,祝贺成为传奇! :-) – A5C1D2H2I1M1N2O1R2T1 2015-03-31 17:02:06

+0

是吗?不过,我有点惊讶。谢谢。 – akrun 2015-03-31 17:03:06