5
簡單:我在尋找一個一般方式以恆定的其他填補merge(..., all = TRUE, ...)
缺失值超過NA
。如何使用非NA值填充缺少的值(...,all = TRUE,...)?
假設
z <- merge(x, y, all = TRUE, ...)
...那我想在z
所有缺失值(從缺少任一x
或y
鍵產生)來填充的(非NA
)不變FILL_VALUE
。
首先,簡單的情況:
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
推出,所以下面做工作:
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 - -
現在解決方案失敗。
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
期望值是其中NA
值由merge
引入由FILL_VALUE
替換所述一個;督察:
## > 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"
也許你可以在列'S1'和'S2'中找到'%zna $ K'中的'!zna $ K%'以及'is.na'作爲分配 – akrun
這個問題的第二個答案看起來像它提供了一個解決你的問題:http://stackoverflow.com/questions/28992362/dplyr-join-define-na-values – ulfelder
怎麼樣'合併(x =替換(x = xna,list = is.na(xna ),values =「XNA」), y = replace(x = yna,list = is.na(yna),values =「YNA」), by =「K」,all = TRUE)' –