diğer alternatif düzenli ifade fonksiyonları regmatches
ve regexec
ile yakalayan alt ifadeleri kullanmaktır stringr paketinden de str_sub
yoktur.
# the original example
x <- 'hello stackoverflow'
# grab the substrings
myStrings <- regmatches(x, regexec('(^.)(.*)', x))
Bu list(c(x, substr(x, 1, 1), substr(x, 2, nchar(x))))
eşdeğerdir uzunluğu 1.
myStrings
[[1]]
[1] "hello stackoverflow" "h" "ello stackoverflow"
listesinde tüm dizeyi ilk karakterini ve "attı" sonucunu verir.Yani, istenen dizinin yanı sıra tam dizinin süper setini içerir.
sapply
ekleme bu yöntem bu ilk unsur olarak eşleştirilmiş tam dize ve yakaladığı eşleşen subexpressions olan bir liste döndürür> 1.
# a slightly more interesting example
xx <- c('hello stackoverflow', 'right back', 'at yah')
# grab the substrings
myStrings <- regmatches(x, regexec('(^.)(.*)', xx))
uzunlukta bir karakter vektörü için çalışmasını sağlayacak Aşağıdaki öğeler olarak ()
. Yani '(^.)(.*)'
düzenli ifadesinde, (^.)
ilk karakterle eşleşir ve (.*)
kalan karakterlerle eşleşir.
myStrings
[[1]]
[1] "hello stackoverflow" "h" "ello stackoverflow"
[[2]]
[1] "right back" "r" "ight back"
[[3]]
[1] "at yah" "a" "t yah"
Şimdi, istenilen alt dizeleri çekmeyi güvenilir sapply
+ [
yöntemi kullanabilirsiniz.
myFirstStrings <- sapply(myStrings, "[", 2)
myFirstStrings
[1] "h" "r" "a"
mySecondStrings <- sapply(myStrings, "[", 3)
mySecondStrings
[1] "ello stackoverflow" "ight back" "t yah"
Bu çok hoş bir hile ama bence bu soruyu özlüyor. – pedrosaurio
Diğer cevaplarla aynı çıktıyı üretebildiğinden daha fazla açıklamanız gerekecek. Ekstraksiyon için "sapply" kullanan son kod bloğuna bakın. İlk karakterin "haşhaş", soruda belirtildiği gibi, bu işlemin sonuçta oluşan vektör üzerinde yinelenmesidir (mySecondStrings). – lmo
Sadece eklediğiniz ek açıklama ile çalışır, ancak yine de olması gerekenden daha kıvrımlı buluyorum. – pedrosaurio