Ben (insan) isimler, başkentlerinde tüm bir vektör var:Decapitalize insan isimleri (için 've muhasebe -)
names <- c("FRIEDRICH SCHILLER", "FRANK O'HARA", "HANS-CHRISTIAN ANDERSEN")
decapitalize şimdiye kadar (sadece ilk harfleri büyük) için, ben oldu
simpleDecap <- function(x) {
s <- strsplit(x, " ")[[1]]
paste0(substring(s, 1,1), tolower(substring(s, 2)), collapse=" ")
}
sapply(names, simpleDecap, USE.NAMES=FALSE)
# [1] "Friedrich Schiller" "Frank O'hara" "Hans-christian Andersen"
kullanarak Ama aynı zamanda
'
ve
-
için hesaba istiyorum.
s <- strsplit(x, " |\\'|\\-")[[1]]
'u kullanarak doğru harfleri bulur, ancak sonra da
'
ve
-
daraltılır.
sapply(names, simpleDecap2, USE.NAMES=FALSE)
# [1] "Friedrich schiller" "Frank o'Hara" "Hans-christian andersen"
: Dolayısıyla, ben
simpleDecap2 <- function(x) {
for (char in c(" ", "\\-", "\\'")){
s <- strsplit(x, char)[[1]]
x <-paste0(substring(s, 1,1), tolower(substring(s, 2)), collapse=char)
} return x
}
sapply (isimleri, simpleDecap, USE.NAMES = YANLIŞ)
fakat sonuçlar birbiri ardına bölünmüş olarak, elbette, daha da kötü çalıştı
Doğru yaklaşımın s <- strsplit(x, " |\\'|\\-")[[1]]
'a göre ayrıldığını düşünüyorum, ancak paste=
problem.
özlü * ve * anlaşılmazlığı seviyorum perl-regexp :-) –
@CarlWitthoft Gerçekten buna katılmıyorum. Başka bir dil gibi, onlar da öğrenilmeli, ama ifade ettikleri için çok basit ve anlaşılabilir. Normal ifadenin anlaşılamaz olduğu genel iddiası devasa bir kanundur: eşdeğer, elle ayrıştırma kodu neredeyse her zaman daha karmaşıktır ve anlaşılması daha zordur. Bunun için “anlaşılmaz” kelimesini kullanmak gerçekten yanıltıcıdır. –
Bu, perl'in kendisi tarafından gizlenmiş bir c-kodu yarışmasıyla soluklaşan programlama stiline izin veren mizahi bir kazıdır. Elbette regex, * dizgi manipülasyonu için gitmenin yolu. –