2017-03-25 1 views
0

데이터 세트에는 수퍼 히어로에 대한 정보가 들어 있습니다.R에서 apply와 함께 substring 함수를 사용하는 방법은 무엇입니까?

# 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) 
} 

이 어떻게 (루프없이) 기능을 적용하여 같은 일을 할 수있는 :이 코드는 문자열 '이름'에서 성가신 브래킷 부분을 제거? 시도한 방법은 다음과 같습니다.

 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)) 

어떻게하면됩니까? 미리 감사드립니다.

+0

도움 주셔서 감사합니다. 적용 함수를 사용하여 문제를 해결하는 방법을 보여 주시겠습니까? –

답변

1

같은 결과를 얻지 못했습니까?

df <- data.frame(comic_characters) 
df$name <- sub("\\(.*", "", df$name) 
1

목표를 달성하기 위해 stringr 패키지를 사용할 수 있습니다.

# 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 
) 

캐릭터 이름 중 일부는 예를 들어, 괄호 안에 두 개의 부품을 가지고 "불량배 (Anna Marie) (지구 616)". 위의 코드는 문자 이름에서 "(Anna Marie)"와 "(Earth-616)"을 모두 제거합니다.

관련 문제