我想通过以下逻辑将两个字符向量合并为一个:
A <- c("005", "NA", "100", "NA")
B <- c("005", "NA", "NA", "257")
C <- c("005", "NA", "100", "257")
让我们说我有矢量A
和B
,我想以这样的方式合并它们,我得到矢量C
,我怎么能实现这一点?
我们可以使用来自coalesce
的dplyr
,但请注意你需要将“NA”替换为NA
,因为它们在R中是不同的。在这里,我将A
和B
都转换成数字来解决这个问题。
library(dplyr)
A <- c("005", "NA", "100", "NA")
B <- c("005", "NA", "NA", "257")
A <- as.numeric(A)
B <- as.numeric(B)
coalesce(A, B)
# [1] 5 NA 100 257
你可以做到
C <- A
C[A == "NA"] <- B[A == "NA"]
C
#[1] "005" "NA" "100" "257"
replace(A, A == "NA", B[A == "NA"])
#[1] "005" "NA" "100" "257"
要么
temp = cbind(A, B)
temp[cbind(seq_along(A),
match(colnames(temp)[max.col(temp != "NA")], colnames(temp)))]
#[1] "005" "NA" "100" "257"
如果你有NA
而不是"NA"
,那么改变
A == "NA"
到is.na(A)
temp != "NA"
到!is.na(temp)