내가 같은 길이의 두 벡터를 병합하기 위해 노력하고있어 곳의 NA 벡터 "는"벡터 "B"의 번호로 정렬하고 그 반대의 :는 R의 인덱스에 따라 두 벡터를 병합
a <- c(1, NA, 3, NA)
b <- c(NA, 2, NA, 4)
출력은 다음과 같아야합니다.
1, 2 ,3, 4
감사합니다.
편집 : I 사용한 용액 is.na(a)
대응 a
의
a[is.na(a)] <- b[is.na(a)]
내가 같은 길이의 두 벡터를 병합하기 위해 노력하고있어 곳의 NA 벡터 "는"벡터 "B"의 번호로 정렬하고 그 반대의 :는 R의 인덱스에 따라 두 벡터를 병합
a <- c(1, NA, 3, NA)
b <- c(NA, 2, NA, 4)
출력은 다음과 같아야합니다.
1, 2 ,3, 4
감사합니다.
편집 : I 사용한 용액 is.na(a)
대응 a
의
a[is.na(a)] <- b[is.na(a)]
값은 is.na(b)
의 부정에 대응 b
의 값으로 교체해야했다. 여기서 원래 벡터 a
또는 b
을 덮어 쓰지 않도록 새 벡터 d
을 정의합니다.
d <- a
d[is.na(d)] <- b[!is.na(b)]
d
# [1] 1 2 3 4
두 번째 위치에서 NA
값이 시작된다는 것을 알고 있으면 할당을 번갈아 사용할 수도 있습니다.
d <- a
d[c(FALSE, TRUE)] <- b[c(FALSE, TRUE)]
d
# [1] 1 2 3 4
바로이 정확한 해결책을 게시하려고 했었습니다. – shadowtalker
완벽한 감사합니다! – Dave
"리터럴"공명이 더 많은 해결책이 있습니다. 그들은 동등한 출력이 :이 na.omit(a)
및 na.omit(b)
에서 그것을 첫째을 병합 쌍을 무엇
m <- mapply(c, na.omit(a), na.omit(b), SIMPLIFY= FALSE) ## or,
m <- Map(c, na.omit(a), na.omit(b))
output <- unlist(m) ## or,
output <- Reduce(c, m)
을하고 함께 모든 쌍을 연결합니다.
library(microbenchmark)
gc()
a <- (1:1e4)[c(TRUE, NA)]
b <- (1:1e4)[c(NA, TRUE)]
microbenchmark(
unlist(mapply(c, na.omit(a), na.omit(b), SIMPLIFY= FALSE)),
unlist(Map(c, na.omit(a), na.omit(b))),
Reduce(c, mapply(c, na.omit(a), na.omit(b), SIMPLIFY= FALSE)),
Reduce(c, Map(c, na.omit(a), na.omit(b))),
times = 100
)
# Unit: milliseconds
# expr min lq
# unlist(mapply(c, na.omit(a), na.omit(b), SIMPLIFY = FALSE)) 4.476689 5.103025
# unlist(Map(c, na.omit(a), na.omit(b))) 4.475753 4.902474
# Reduce(c, mapply(c, na.omit(a), na.omit(b), SIMPLIFY = FALSE)) 75.974627 82.953051
# Reduce(c, Map(c, na.omit(a), na.omit(b))) 75.919419 82.626217
# median uq max neval
# 5.488113 5.723023 10.59291 100
# 5.422528 5.784764 13.04502 100
# 86.082578 89.652660 114.94584 100
# 85.761412 89.550317 158.90629 100
당연히, Reduce
이 unlist
보다 훨씬 느립니다 :
는 지금까지 성능이가는대로, 여기에 빠른 벤치 마크입니다. Map
은 mapply
보다 약간 느립니다. 그러나 Reduce
은 훨씬 더 일반적으로 적용 가능하지만 unlist
은 실제로이 특별한 경우 만 처리 할 수 있습니다.
이 솔루션은 각 벡터에서 NAs의 수가 동일한 경우에만 작동합니다. – Dave
매우 사실이지만, 이것이 "조합"문제인지 아니면 "NA 작성"문제인지 확실하지 않았습니다. 이것은 분명히 후자가 아닌 전방을 향한 것이다. – shadowtalker
"채우기 in NAs"문제가 아주 많이 있습니다. 사실 내가 바라는 해법은 벡터로부터 NA의 인덱스를 지정하고 b의 값을 삽입하는 것입니다. – Dave
시도한 것을 보여주고 작동하지 않는 것을 설명 할 수 있습니까? – EWit
당신이 게시 한 편집에서''는 정말로 필요하지 않습니다. –