मेरे पास दो डेटाफ्रेम d1 और d2 हैं। मेरे डेटा फ़्रेम 2010 से जनगणना डेटा हैं। मैं उन्हें एक सामान्य विशेषता का उपयोग करके मर्ज करना चाहता हूं

merge (d1, d2, by.x="GEOID", by.y= "GISJOIN")

D1 में GEOID के रूप में सामान्य आईडी है (उदाहरण के लिए। 310019654001) जबकि d2 में GISJOIN के समान आईडी विशेषता है (उदाहरण के लिए। 31000109654001)। मुझे GISJOIN विशेषता में तीसरे और सातवें स्थान से "0" को हटाना होगा। मैं इसे आर में कैसे कर सकता हूं?

मैंने मूल्यों का उपयोग करके विभाजित किया

splitted <- as.data.frame(t(sapply(d2$GISJOIN, function(x) substring(x, first=c(1,4,8), last=c(2,6,14)))))

splitted$v4 <- (paste(splitted$V1, splitted$V2, splitted$V3))

V4 चरित्र मान है, जब मैं संख्यात्मक के रूप में करता हूं तो यह मुझे त्रुटि देता है: चेतावनी संदेश: एनए जबरदस्ती द्वारा पेश किया गया

0
user65127 7 नवम्बर 2020, 03:22

1 उत्तर

सबसे बढ़िया उत्तर

एक टिप्पणी के रूप में टाइप करने के लिए बहुत लंबा है, आपके द्वारा प्रदान किए गए एकमात्र उदाहरण का उपयोग करके और एक और आविष्कार किया गया उदाहरण यह दिखाने के लिए कि आपको sapply() की आवश्यकता नहीं है:

d2 = data.frame(GISJOIN=c("31000109654001","12345678910112"))
d2$GISJOIN = as.character(d2$GISJOIN)

अब आपके पास क्या है:

splitted <- as.data.frame(t(sapply(d2$GISJOIN, function(x) substring(x, first=c(1,4,8), last=c(2,6,14)))))

splitted$v4 <- (paste(splitted$V1, splitted$V2, splitted$V3))

               V1  V2      V3             v4
31000109654001 31 001 9654001 31 001 9654001
12345678910112 12 456 8910112 12 456 8910112

नई स्ट्रिंग में अभी भी बीच में रिक्त स्थान हैं, इसलिए यदि आप as.numeric() में कनवर्ट करते हैं तो यह NA देता है। नीचे मैंने इसे केवल वर्णों में विभाजित किया और स्थिति 3 और 7 को बाहर कर दिया:

d2$new = lapply(strsplit(d2$GISJOIN,""),function(i){
                          paste(i[-c(3,7)],collapse="")
                           })

as.numeric(d2$new)
[1] 310019654001 124568910112
0
StupidWolf 7 नवम्बर 2020, 13:18