मैं नियमित अंतराल पर एक स्ट्रिंग को विभाजित करना चाहता हूं। मेरा प्रश्न इस तरह के समान है: How to split a string into substrings of a given length? सिवाय इसके कि मेरे पास केवल एक स्ट्रिंग के बजाय डेटा सेट में तारों का एक स्तंभ है।नियमित अंतराल पर विभाजित स्ट्रिंग
df = read.table(text = "
my.id X1
010101 1
010102 1
010103 1
010104 1
020101 1
020112 1
021701 0
021802 0
133301 0
133302 0
241114 0
241215 0
", header = TRUE, colClasses=c('character', 'numeric'), stringsAsFactors = FALSE)
यहाँ वांछित परिणाम है:
यहाँ एक उदाहरण डेटा सेट है। मैं दिखाया गया है, अग्रणी शून्य को दूर करना पसंद करेंगे:
desired.result = read.table(text = "
A1 A2 A3 X1
1 1 1 1
1 1 2 1
1 1 3 1
1 1 4 1
2 1 1 1
2 1 12 1
2 17 1 0
2 18 2 0
13 33 1 0
13 33 2 0
24 11 14 0
24 12 15 0
", header = TRUE, colClasses=c('numeric', 'numeric', 'numeric', 'numeric'), stringsAsFactors = FALSE)
यहाँ एक पाश है कि करीब आ रहा है और हो सकता है कि मैं इसे का उपयोग कर सकते है। हालांकि, मैं सोच रहा हूं कि एक और अधिक प्रभावी तरीका है।
for(i in 1:nrow(df)) {
print(substring(df$my.id[i], seq(1, 5, 2), seq(2, 6, 2)))
}
यह apply
बयान काम नहीं करता:
apply(df$my.id, 1, function(x) substring(df$my.id[x], seq(1, 5, 2), seq(2, 6, 2)) )
किसी भी सुझाव के लिए धन्यवाद। मैं आधार आर
मेरा सुझाव था शायद 'x <- gsub ('([0-9] {2}) ([0-9] {2}) ([0-9] {2}) ',' \\ 1 - \\ 2 - \\ 3 ', df $ my.id); do.call (rbind, lapply (strsplit (x, '-), as.numeric))' लिखने और 'regex' को कई बार करने से बचने के लिए। – mnel
बहुत अच्छा! मैंने एक कीस्ट्रोक जोड़ा: strsplit (x, '-') –
@mnel धन्यवाद। मैं अपना जवाब अपडेट करता हूं। – agstudy