(1) प्रत्येक तत्व यह एक एकल gsub
साथ किया जा सकता (यह मानते हुए नामों के भीतर कोई अल्पविराम के देखते हैं) में एक ही नाम बनाए रखें:
> gsub("([^, ][^,]*), ([^,]+)", "\\2 \\1", names)
[1] "Simon Beaufoy, Danny Boyle" "Christopher Nolan"
[3] "Stuart Blumberg, Lisa Cholodenko" "David Seidler"
[5] "Aaron Sorkin"
> gsub("([^, ][^,]*), ([^,]+)", "\\2 \\1", "Hoover, J. Edgar")
[1] "J. Edgar Hoover"
(2) एक में अलग तत्व प्रति नाम तो आपको एक अलग तत्व में प्रत्येक प्रथम नाम अंतिम नाम चाहता था तो का उपयोग (क) स्कैन
scan(text = out, sep = ",", what = "")
जहां out
ऊपर gsub
का परिणाम है या उसे सीधे कोशिश (ख) प्राप्त करने के लिए strapply:
> library(gsubfn)
> strapply(names, "([^, ][^,]*), ([^,]+)", x + y ~ paste(y, x), simplify = c)
[1] "Simon Beaufoy" "Danny Boyle" "Christopher Nolan"
[4] "Stuart Blumberg" "Lisa Cholodenko" "David Seidler"
[7] "Aaron Sorkin"
> strapply("Hoover, Edgar J.", "([^, ][^,]*), ([^,]+)", x + y ~ paste(y, x),
+ simplify = c)
[1] "Edgar J. Hoover"
ध्यान दें कि मिलान के लिए प्रयोग किया जाता है उसी रेगुलर एक्सप्रेशन उपरोक्त सभी उदाहरण हैं।
अद्यतन: हटाया अल्पविराम प्रथम और अंतिम नाम को अलग।
अद्यतन: जोड़ा कोड बाहर प्रत्येक पहला नाम मामले में एक अलग तत्व वरीय उत्पादन प्रारूप है कि में अंतिम नाम के अलग करने के लिए।
यह हमेशा अधिक बस से दो नामों के साथ नाम के जोड़े के होने जा रहा है, या लोगों को वहाँ हो जाएगा? – A5C1D2H2I1M1N2O1R2T1
आपका मतलब है "हूवर, जे एडगर" जैसे कुछ? हो सकता है। यह वास्तव में दुर्भाग्यपूर्ण है कि वही विभाजक का उपयोग पहले नाम और अन्य नामों के नाम से अलग करने के लिए किया गया है। लेकिन यह वही तरीका है, मुझे डर है। क्या सच है (मुझे उम्मीद है ...) यह है कि अल्पविराम पहले या अंतिम नाम में प्रकट नहीं होता है। – RoyalTS
मुझे लगता है कि उनके उदाहरण में कुछ उद्धरण गायब थे। यदि एकल तत्व में 1 से अधिक नाम होते हैं तो शायद सरल रेगेक्स करने से पहले ऐसा करने के लिए बहुत सारे काम (विभाजन और अद्वितीय नाम बनाने के लिए पुन: संयोजन) होगा। –