我有例如向量这样的:合并中的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)
是否有这样做的一种方式没有广泛的循环?非常感谢:)
我有例如向量这样的:合并中的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)
是否有这样做的一种方式没有广泛的循环?非常感谢:)
你可以尝试
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
这很完美,非常感谢:) – Coldfusion 2015-03-31 16:14:46
是的,我试过了,但它说我不得不再等7分钟:P – Coldfusion 2015-03-31 16:29:01
@ Coldfusion谢谢你通知我。 – akrun 2015-03-31 16:29:31
我会考虑pmin
或pmax
为给你描述的情况更直接的方式:
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
我忘了pmin/pmax。感谢您的展示。 – akrun 2015-03-31 16:27:45
@akrun,谢谢。我认为你的方法仍然会更快 - 我认为'rowSums'已经非常优化了。哦,祝贺成为传奇! :-) – A5C1D2H2I1M1N2O1R2T1 2015-03-31 17:02:06
是吗?不过,我有点惊讶。谢谢。 – akrun 2015-03-31 17:03:06
如果在多个向量中的相同位置有值,该怎么办? – A5C1D2H2I1M1N2O1R2T1 2015-03-31 16:09:36
在我的所有媒介之间,每个位置应该只有一个值,其余的应该是NA。 – Coldfusion 2015-03-31 16:10:42
[This](http://stackoverflow.com/q/19253820/324364)可能会有所帮助。 – joran 2015-03-31 16:11:13