संक्षेप में: मैं एक सामान्य रास्ता NA
से एक निरंतर दूसरे के साथ merge(..., all = TRUE, ...)
में लापता मूल्यों को भरने के लिए की तलाश में हूँ।लापता मानों को मर्ज से कैसे भरें (..., all = TRUE, ...) NA के अलावा किसी अन्य मान के साथ?
मान लीजिए कि
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
द्वारा प्रतिस्थापित कर रहे हैं; 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"
शायद आप – akrun
असाइन करने के लिए कॉलम 'एस 1' और 'एस 2' पर 'is.na' के साथ% yna $ k' में 'zna $ k%' के साथ पंक्तियां पा सकते हैं। इस प्रश्न का दूसरा उत्तर ऐसा लगता है यह आपकी समस्या का एक समाधान प्रदान करता है: http://stackoverflow.com/questions/28992362/dplyr-join-define-na-values – ulfelder
'विलय (x = प्रतिस्थापन (x = xna, list = is.na (xna) के बारे में क्या है), मान = "एक्सएनए"), वाई = प्रतिस्थापित करें (x = yna, list = is.na (yna), मान = "वाईएनए"), = "के", सभी = सही) ' –