Ersetzen gesamte Ausdruck, der eine spezielle Zeichenfolge enthält
Habe ich Daten-frame, der hat eine Spalte mit einer großen Anzahl von Datei-Namen, wie:
d <- c("harry11_scott80_norm.avi","harry11_norm.avi","harry11_scott80_lpf.avi",
"joel51_lpf.avi","rich82_joel51_lpf.avi")
Ich möchte, dass R zu ersetzen, alle Ausdrücke, die mit zwei Personen Namen wie harry11_scott80_norm.avi
mit dem Ausdruck incongruent
und alle, die mit der einzelnen person name wie harry11_norm.avi
mit congruent
. Ich könnte gsub
zu tun:
dd <- gsub("harry11_scott80_norm.avi", "incongruent", d)
aber ich habe eine Menge dieser Namen, so wäre es eine sehr klobig Lösung. Also idealerweise möchte ich ersetzen Sie den GESAMTEN Ausdruck, der strings enthält, wie _scott80_
mit "inkongruent". Ich dachte, dass gsub
dies tun können, aber wenn ich es laufen:
dd <- gsub("_scott80_", "incongruent", d)
gibt es mit harry11incongruentnorm.avi
, das ist natürlich, weil es einfach ersetzen Sie die exakte Zeichenfolge übereinstimmt. Ich recon es eine Möglichkeit gibt, zu sagen gsub
zu ersetzen-Ausdruck vollständig enthält ausgewählte Zeichenfolge, aber ich kann es nicht finden.
Es war eine Frage In R, wie kann ich ersetzen Sie eine Zeichenfolge mit einem bestimmten Muster durch eine andere Zeichenfolge?, aber ich bin nicht sicher, wie Sie Sie verwenden agrep
in diesem Zusammenhang.
EDIT: Seite bonus-Frage - basierend auf dem @GSEE umfasst die Antwort, gibt es irgendeine Funktion, mit der Sie übergeben eine Liste von strings, die Sie ersetzen möchten? Zum Beispiel gsub(c(".*_scott80_.*", ".*_harry11_.*"), "incongruent", d)
wird nicht funktionieren.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier ist ein Weg,
Oder mit
grep
Adresse Bearbeiten, ich glaube, dies wird es tun, (mit
|
bedeutet "oder")Natürlich, Sie haben noch keine Saiten in
d
entsprechen"_harry11_"
gsub
passt mein Zweck viel besser, weil es erlaubt mir, erstellen Sie separate Spalte mit neuen Ausdrücken.Wenn Sie die Dateinamen sind alle das gleiche format haben, ist diese mit zwei Namen, die ich.e
harry11_scott80_norm.avi
immer haben zwei Unterstriche, und diese mit einem Namen, D. H.harry11_norm.avi
immer haben ein Unterstrich, kann man schnell so etwas wie das umbenennen von Dateien: