5
간략한 설명 : 일반 이외의 상수로 merge(..., all = TRUE, ...)
에 누락 된 값을 입력하는 방법을 찾고 있습니다.merge (..., all = TRUE, ...)에서 빠진 값을 NA가 아닌 값으로 채우는 방법은 무엇입니까?
즉
z <- merge(x, y, all = TRUE, ...)
... 내가 z
모든 누락 값이 (비 NA
)으로 채워질 (x
또는 y
하나의 키 누락으로 인한) 원하는 일정한 가정 FILL_VALUE
.
첫째, 쉽게 경우 :
z[is.na(z)] <- FILL_VALUE
## > z
## K I R B C S1 S2
## 1 1001 3 0.1 TRUE 0.1+0.2i a d
## 2 1002 4 0.2 FALSE 0.3+0.4i b e
## 3 1003 5 0.3 TRUE 0.5+0.6i c f
## 4 1004 6 0.4 FALSE 0.7+0.8i - -
## 5 1005 7 0.5 TRUE 0.9+1.0i - -
:이 경우
FILL_VALUE <- "-"
x <- data.frame(K=1001:1005,
I=3:7,
R=c(0.1, 0.2, 0.3, 0.4, 0.5),
B=c(TRUE, FALSE, TRUE, FALSE, TRUE),
C=c(0.1+0.2i, 0.3+0.4i, 0.5+0.6i, 0.7+0.8i, 0.9+1.0i))
y <- data.frame(K=1001:1003,
S1=c("a", "b", "c"),
S2=c("d", "e", "f"),
stringsAsFactors = FALSE)
z <- merge(x, y, all = TRUE, by = "K")
## > z
## K I R B C S1 S2
## 1 1001 3 0.1 TRUE 0.1+0.2i a d
## 2 1002 4 0.2 FALSE 0.3+0.4i b e
## 3 1003 5 0.3 TRUE 0.5+0.6i c f
## 4 1004 6 0.4 FALSE 0.7+0.8i <NA> <NA>
## 5 1005 7 0.5 TRUE 0.9+1.0i <NA> <NA>
, 결과의 유일한 NA
항목은 그 때문에 다음 작업을 수행의 merge
에 의해 소개
이제이 솔루션이 실패한 경우입니다.
xna <- data.frame(K=1001:1005,
I=c(NA, 4:7),
R=c(0.1, NA, 0.3, 0.4, 0.5),
B=c(TRUE, FALSE, NA, FALSE, TRUE),
C=c(0.1+0.2i, 0.3+0.4i, 0.5+0.6i, NA, 0.9+1.0i))
yna <- data.frame(K=1001:1003,
S1=c(NA, "b", "c"),
S2=c("d", NA, "f"),
stringsAsFactors = FALSE)
zna <- merge(xna, yna, all = TRUE, by = "K")
## > zna
## K I R B C S1 S2
## 1 1001 NA 0.1 TRUE 0.1+0.2i <NA> d
## 2 1002 4 NA FALSE 0.3+0.4i b <NA>
## 3 1003 5 0.3 NA 0.5+0.6i c f
## 4 1004 6 0.4 FALSE NA <NA> <NA>
## 5 1005 7 0.5 TRUE 0.9+1.0i <NA> <NA>
는 zna
대한 원하는 값은 merge
의해 도입 NA
FILL_VALUE
값으로 대체되는 하나이며; IOW : 따라서
## > zna ## K I R B C S1 S2 ## 1 1001 NA 0.1 TRUE 0.1+0.2i <NA> d ## 2 1002 4 NA FALSE 0.3+0.4i b <NA> ## 3 1003 5 0.3 NA 0.5+0.6i c f ## 4 1004 6 0.4 FALSE NA - - ## 5 1005 7 0.5 TRUE 0.9+1.0i - -
, 이것은하지 않을 것이다 :이 할당이 부적절와 함께 몇 가지 값을 교체보다 더 많이한다는 것을 zna[is.na(zna)] <- FILL_VALUE
## > zna
## K I R B C S1 S2
## 1 1001 - 0.1 TRUE 0.1+0.2i - d
## 2 1002 4 - FALSE 0.3+0.4i b -
## 3 1003 5 0.3 - 0.5+0.6i c f
## 4 1004 6 0.4 FALSE - - -
## 5 1005 7 0.5 TRUE 0.9+1i - -
주 "-"; 또한 여러 열 유형을 변경합니다
## > zna[, "I"]
## [1] "-" "4" "5" "6" "7"
## > zna[, "B"]
## [1] "TRUE" "FALSE" "-" "FALSE" "TRUE"
## > zna[, "R"]
## [1] "0.1" "-" "0.3" "0.4" "0.5"
## > zna[, "C"]
## [1] "0.1+0.2i" "0.3+0.4i" "0.5+0.6i" "-" "0.9+1i"
'S1NA'와 'S2'에 'is.na'와 함께'% zna $ K % in % yna $ K '가있는 행을 찾을 수 있습니다. – akrun
이 질문에 대한 두 번째 대답은 다음과 같습니다 그것은 당신의 문제에 대한 하나의 해결책을 제공합니다 : http://stackoverflow.com/questions/28992362/dplyr-join-define-na-values – ulfelder
'merge (x = xna, list = is.na (xna), y = 바꾸기 (x = yna, list = is.na (yna), 값 = "YNA"), by = "K", 모두 = TRUE)' –