2017-03-25 2 views
0

Der Datensatz enthält Informationen über Superhelden. Dieser Code entfernt die lästigen Klammerteil aus dem String ‚name‘:Wie Teilstring-Funktion mit anwenden in R?

# package loading 
library(fivethirtyeight) 

# data opening 
data(package ="fivethirtyeight") 
data(comic_characters) 

for (i in 1:length(comic_characters$name)) 
{ 
    bracket[i]    <- which(strsplit(comic_characters$name[i], "")[[1]] == "(") 
    comic_characters$name[i] <- substr(comic_characters$name[i], start = 1, stop = bracket[i]-2) 
} 

Wie kann ich das gleiche tun mit Funktionen anwenden (ohne Schleife)? Hier ist, wie ich es versucht habe:

 bracket = sapply(sapply(strsplit(comic_characters$name, ''), function(x) 
    which(x == '(')), `[`, 1) 

    # here comes the problem: 
     comic_characters$name <- lapply(x, function(x) 
substr(comic_characters$name, start=1, stop=bracket[i]-2)) 

Wie kann ich das tun? Vielen Dank im Voraus!

+0

Vielen Dank für Ihre Hilfe. Könnten Sie mir bitte zeigen, wie Sie das Problem mit der Anwendungsfunktion lösen können? –

Antwort

1

Sie könnten das stringr Paket verwenden, um Ihr Ziel zu erreichen.

# package loading 
library(fivethirtyeight) 
library(stringr) 

# data opening 
data(package ="fivethirtyeight") 
data(comic_characters) 

# remove text enclosed in brackets from character names 
cleaned_character_names <- str_replace_all(
    string = comic_characters$name, 
    pattern = "\\(.*\\)", 
    replacement = "" 
) 

# trim whitespace from start and ending of the character names 
cleaned_character_names <- str_trim(
    string = cleaned_character_names 
) 

Einige der Charakternamen haben zwei Teile, die in Klammern eingeschlossen sind, z. "Schelm (Anna Marie) (Erde-616)". Der obige Code entfernt sowohl "(Anna Marie)" als auch "(Earth-616)" aus dem Charakternamen.

Verwandte Themen