मैं आर स्टूडियो में प्रत्येक वर्ण की नकल करना चाहता हूं

a <- c("abcd")

मैं चाहता हूं कि परिणाम हो

"aabbccdd"

मैंने कोशिश की

strrep(a, 2)

लेकिन यह मुझे "abcdabcd" देता है

एक और चीज जो मैं करने की कोशिश कर रहा हूं वह है:

मैं चाहता हूं कि परिणाम "a$b$c$d" हो, प्रत्येक वर्ण के बीच में $ डालें

क्या कोई मदद कर सकता है? जितना आसान उतना अच्छा।

1
vicky 12 सितंबर 2019, 23:41

2 जवाब

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

gsub

gsub("(.)", "\\1\\1", a)
#[1] "aabbccdd"

gsub("(.)", "\\1$", a)
#[1] "a$b$c$d$"

स्ट्रस्प्लिट

sapply(strsplit(a, ""), function(x) paste(rep(x, each = 2), collapse = ""))
#[1] "aabbccdd"

sapply(strsplit(a, ""), function(x) paste(paste0(x, "$"), collapse = ""))
#[1] "a$b$c$d$"

सबस्ट्रिंग

sapply(a, function(x)
    paste(rep(substring(x, sequence(nchar(x)), sequence(nchar(x))), each = 2), collapse = ""))
#      abcd 
#"aabbccdd" 

sapply(a, function(x)
    paste(paste0(substring(x, sequence(nchar(x)), sequence(nchar(x))), "$"), collapse = ""))
#      abcd 
#"a$b$c$d$" 
2
d.b 13 सितंबर 2019, 00:10
बहुत बहुत धन्यवाद, ठीक वही जो मुझे चाहिए। मैं gsub फ़ंक्शन को समझता हूं, लेकिन क्या आप समझा सकते हैं कि पैटर्न "(.)" क्यों है? मुझे लगता है कि प्रतिस्थापन "\\ 1" का अर्थ स्ट्रिंग ही है, है ना?
 – 
vicky
12 सितंबर 2019, 23:57

एक अलग समाधान:

paste(unlist(lapply(1:nchar(a), function(k) rep(substr(a,k,k),2))), collapse="")
# [1] "aabbccdd"

paste(unlist(lapply(1:nchar(a), function(k) rep(substr(a,k,k),1))), collapse="$")
# [1] "a$b$c$d"
1
Marco Sandri 12 सितंबर 2019, 23:55