nchar
Count the number of characters, also auch Länge eines Strings:
> nchar( c("Lorem", "ipsum") )
[1] 5 5
tolower/toupper
Gross-/Kleinschreibung
> tolower( LETTERS[1:8] )
[1] "a" "b" "c" "d" "e" "f" "g" "h"
> toupper( letters[1:8] )
[1] "A" "B" "C" "D" "E" "F" "G" "H"
match
Positionen (Index) von Elementen in einer Liste finden sich mit match.
> match(c("d","p"),letters)
[1] 4 16
grep
suchen von Ausdrücken in einem Vektor, retourniert die Indizes der Elemente, in denen der Ausdruck vorkommt
> x <- c("This"," is a Andri 1,2"," and 3 * test sentence")
> grep(pattern="A",x=x)
[1] 2
regexpr
suchen von Ausdrücken in einem Vektor, retourniert pro Element die ERSTE Position des Vorkommens (-1 für nicht vorhanden) und die Länge der Übereinstimmung
> x <- c("This"," is a Andri 1,2"," and 3 * test sentence")
> regexpr(pattern="i",text=x)
[1] 3 2 -1
attr(,"match.length")
[1] 1 1 -1
gregexpr
suchen von Ausdrücken in einem Vektor,
retourniert pro Element ALLE Positionen und die Länge der Übereinstimmung
> x <- c("This"," is a Andri 1,2"," and 3 * test sentence")
> gregexpr(pattern="i",text=x)
[[1]]
[1] 3
attr(,"match.length")
[1] 1
[[2]]
[1] 2 11
attr(,"match.length")
[1] 1 1
[[3]]
[1] -1
attr(,"match.length")
[1] -1
sub
Ersetzt das ERSTE Vorkommen von pattern in einer Zeichenkette
> x <- c("This"," is a Andri 1,2"," and 3 * test sentence")
> sub(pattern="i", replacement="III", x=x)
[1] "ThIIIs" " IIIs a Andri 1,2" " and 3 * test sentence"
gsub
Ersetzt ALLE Vorkommen von pattern in einer Zeichenkette
> x <- c("This"," is a Andri 1,2"," and 3 * test sentence")
> gsub(pattern="i", replacement="III", x=x)
[1] "ThIIIs" " IIIs a AndrIII 1,2" " and 3 * test sentence"
substr
Teile eines Strings extrahieren (oder ersetzen, letzteres aber besser mit (g)sub):
> substr( x="Lorem ipsum dolor sit amet", start=7, stop=500 )
[1] "ipsum dolor sit amet"
substr( x<-"Lorem ipsum dolor sit amet", start=nchar(x)-3, stop=nchar(x) )
left, right und mid
Die guten alten BASIC-Zeichen-Funktionen mit regular expressions in Funktionen umgesetzt:
left <- function(x, n) {
# x...string, n...Anzahl Zeichen
sub( pattern=paste(".{",nchar(x)-n,"}$", sep=""), replacement="", x=x)
}
right <- function(x, n) {
sub( pattern=paste("^.{",nchar(x)-n,"}", sep=""), replacement="", x=x)
}
mid <- function(x, pos, n) {
x <- sub( pattern=paste("^.{",pos-1,"}", sep=""), replacement="", x=x)
x <- sub( pattern=paste(".{",nchar(x)-n,"}$", sep=""), replacement="", x=x)
return(x)
}
trim
Leerzeichen vor und hinter dem Text entfernen
sub(" *([^ ]+) *", "\\1", x) does not work.. where had I that from?
gsub( pattern="^ +| +$", replacement="", x=" trim links und rechts ")
oder wenn auch Tabulatoren gelöscht werden sollen:
gsub( pattern="^[ \t]+|[ \t]+$", replacement="", x=" trim links und rechts ")
Beispiel
Alle Vektorelemente, die eine Zahl enthalten:
> x[1] "This" " is a Andri 1,2" " and 3 * test sentence"
> x[ as.matrix( regexpr(pattern="[[:digit:]]",text=x) )>0 ]
[1] " is a Andri 1,2" " and 3 * test sentence"
paste
Spaltenweises Verbinden von Spalten eines data.frames:
do.call("paste", c(data.frame(letters, LETTERS), list(sep="/")))
[1] "a/A" "b/B" "c/C" "d/D" "e/E" "f/F" "g/G" "h/H" "i/I" "j/J" "k/K" "l/L" "m/M" "n/N" "o/O" "p/P" "q/Q" "r/R"[19] "s/S" "t/T" "u/U" "v/V" "w/W" "x/X" "y/Y" "z/Z"
und warum nicht direkt (?): :-o
apply( data.frame(letters, LETTERS), 1, paste, collapse="/" )
und warum nicht nocht direkter (???): :-o :-o :-o
data.frame(letters, LETTERS, paste(letters, LETTERS, sep="/"))
Dienstag, 20. Januar 2009
Abonnieren
Posts (Atom)