2016-03-30 10 views
0

RelatedToText numaralı sütunu kullanarak, 2 yeni sütun oluşturmak istiyorum Coverage_Type ve Name.R'de düzenli ifade - son simgeden sonra kalanları temizle

İçeriği son "-" işaretinden önce ve sonra bulabiliyorsak, bence iyi olmalıyım. Ama sonra, eğer son durumu görürseniz, bir ismin parçaları arasında, yani Mayur ve Cook arasında bir "-" işareti vardır.

Sorularım 2 kat: önce, son "-" işaretinden önce ve sonra içeriği nasıl ayıklamam gerekir? İkinci olarak, ad, yukarıda belirtildiği gibi kendi içinde bir çizgi varsa, içeriği nasıl düzgün şekilde çıkarmalıyım?

RelatedToTxt      Coverage_Type   Name 
Collision - NAWADA REALTY, INC  Collision    NAWADA REALTY, INC 
Collision - Don Cooks    Collision    Don Cooks 
Pro Dam - Veh - Spl Lt - Raj Perk Pro Dam - Veh - Spl Lt Raj Perk 
Rental Reimbursement - Mayur-Cook Rental Reimbursement Mayur-Cook 

Örnek veriler:

RelatedToTxt <- c("Collision - NAWADA REALTY, INC", "Collision - Don Cooks", 
    "Pro Dam - Veh - Spl Lt - Raj Perk", "Rental Reimbursement - Mayur-Cook") 
+0

ile iki sütun dönüştürülebilir *' size yardımcı olabilecek, açgözlü çok * * edilebilir. İkinci sorunuz için, "-" nin etrafında boşluk olmadığını unutmayın. Bu farklılaşmaya yardımcı olmalıdır. Ama denediğin şey hakkında bazı kodlar göstermelisin. SO bir kod yazma hizmeti değildir. – brittenb

+0

'strsplit (RelatedToTxt," \\ s * - \\ s * (? = [^ -] * $) ", perl = T)' yardımcı olabilir. Ayrıca, gsub (". * - \\ s * ([^ -] *) $", "\\ 1", RelatedToTxt) 've' gsub ("(. *?) \\ s * - \\ s * [^ -] * $ "," \\ 1 ", RelatedToTxt)' –

+0

@Wiktor Stribizew, bölmeyi engellemek için \\ s * - \\ s * 'be' \\ s + - \\ s + 'yapmamalıdır. tireli isimlerde? Yanılıyor olabilirim, sadece merak ediyorum. – brittenb

cevap

1

iki sütuna metin bölmek strsplit kullanmayı deneyin. Bu regex: .+\\K\\s-\\s kullanarak son " - " üzerinde bölünebilir. .+\\K, bir boşluk-tire-alanı desenini eşleştirmeden önceaçgözlü bir desen kullanır ve eşleştikten sonra eşleşmesini sağlar ve \\K kullanarak eşleşir. .+'un açgözlülüğü, "Pro Dam - Veh - Spl Lt" deki tire işaretlerini atlamasına izin veriyor.

strsplit(RelatedToTxt, ".+\\K\\s-\\s", perl = TRUE) 

#[[1]] 
#[1] "Collision"   "NAWADA REALTY, INC" 
# 
#[[2]] 
#[1] "Collision" "Don Cooks" 
# 
#[[3]] 
#[1] "Pro Dam - Veh - Spl Lt" "Raj Perk" 
# 
#[[4]] 
#[1] "Rental Reimbursement" "Mayur-Cook" 

çıkış

. `İlk soru için

do.call(rbind, strsplit(RelatedToTxt, ".+\\K\\s-\\s", perl = TRUE)) 
+0

Sanırım '(?! \\ 1 + $)' yi '. * $' Ile güvenli bir şekilde değiştirebilirsiniz. Önceki açgözlü '. +', Dizgedeki son boşluk-tire-uzay yığınla eşleşir. –

+0

Evet, bunu yazdığımda neredeyse uyuyordum. Bu bakışta gereksizdi. –

+0

Çözümünüz bana tam görünüyor. Şimdi işe gidiyorum. Saat 01.00'de cevap alamıyordum. –