Я хотел бы объединить два вектора символов в один по следующей логике:
A <- c("005", "NA", "100", "NA")
B <- c("005", "NA", "NA", "257")
C <- c("005", "NA", "100", "257")
Допустим, у меня есть вектор A и B, и я хочу объединить их таким образом, чтобы получить вектор C, как мне этого добиться?





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)Мы можем использовать 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"