İki farklı koşulu temel alan bir dizge sütununu (farklı desenlerle) bölme

0

Soru

Bu sorunla ilgili yardım almayı umuyordum. Bu yüzden iki tür dizeye sahip bir sütunum var ve dizeleri 2 farklı koşul kullanarak birden çok sütuna bölmem gerekecek. Bunları tek tek nasıl böleceğimi bulabilirim, ancak koduma belki bir İF ifadesi eklemek için uğraşıyorum. Bu, aşağıdaki örnek veri kümesidir:

data = data.frame(string=c("HFUFN-087836_661", "207465-125 - IK_6 Mar 2009.docx_37484956"))

İlk değişken türü için (_ile). İşten sonra ayrılmak istiyorum. Bu yüzden bunun için aşağıdaki kodu kullandım

strsplit(data$string, "-")

Olan değişkenler için.docx onların içinde docx'ten sonra ayrılmak istiyorum. Bu dizede birden çok kez geldiği için "_" ye göre bölünemiyorum. Bu yüzden aşağıdaki kodu kullandım:

strsplit(data$string, "x_")

Sorum şu ki, bu tür dizelerin her ikisi de aynı sütunda görünüyor. R'ye" docx " dizesinde ise x_'den sonra bölündüğünü, ancak _üzerinde bölünmediğini söylemenin bir yolu var mı?

Herhangi bir yardım takdir edilecektir-Teşekkür ederim çocuklar!

data-manipulation r string strsplit
2021-11-23 21:43:22
1

En iyi cevabı

0

İşte bir tidyr çözüm:

library(tidyr)
data %>%
extract(string,
        into = c("1","2"),    # choose your own column labels
        "(.*?)_([^_]+)$")
                                1        2
1                    HFUFN-087836      661
2 207465-125 - IK_6 Mar 2009.docx 37484956

Regex nasıl çalışır?:

Regex, dizeleri iki "yakalama grubuna" ve aradaki bir alt çizgiye böler:

  • (.*?): herhangi bir karakterle eşleşen ilk yakalama grubu (.) sıfır veya daha fazla kez (*) açgözlülükle (?)
  • _: değişmez bir alt çizgi
  • ([^_]+)$: alt çizgi olmayan herhangi bir karakterle eşleşen ikinci yakalama grubu ([^_]) bir veya daha fazla kez (+) dizenin en sonunda ($)

Veri:

data = data.frame(string=c("HFUFN-087836_661", "207465-125 - IK_6 Mar 2009.docx_37484956"))
2021-11-24 16:36:45

Hey bu işe yaradı-çok teşekkür ederim. Eğer bu çok fazla iş değilse, lütfen bunu nasıl yaptığınızı açıklayabilir misiniz? Bu kısmı tam olarak anlamıyorum:"" (.*?)_([^_]+)$")". Çok teşekkürler!
T K

Regex parçasının nasıl çalıştığına dair bir açıklama yaptık
Chris Ruehlemann

Diğer dillerde

Bu sayfa diğer dillerde

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................