2016-12-09 4 views
2

"fish"라는 데이터 프레임이 있습니다.특정 문자로 시작하는 값을 NA (R)로 변경하는 방법

데이터 프레임에는 3 가지 변수가 있습니다. 변수 중 하나를 "종"이라고합니다.

문자 M으로 시작하는 일부 종이 있습니다. 문자 M으로 시작하는 모든 종의 값을 대신 누락 (NA)해야합니다.

전체 종 이름을 수행 할 때 NA로 변경하는 방법을 알고 있지만 문자 M으로 시작하는 종에만 어떻게해야합니까?

fish$species[fish$species=="^M_"] <- NA 

을하지만이 작동하지 않습니다

나는 이것을 시도했습니다. 누구든지 도와 줄 수 있습니까?

+0

일치하는 패턴을 테스트하려면'=='이 아닌'grepl' 함수가 필요합니다. – Frank

+0

감사합니다. gsub와 grep을 사용하여 물건을 보았습니다. 하지만 코드를 도와 주실 수 있습니까? 나는 ==를 "grep1"로 바꾸는가? – newtoallthis

+0

아, 나는 R이'startsWith' 함수 (아래 답변에)를 추가했음을 잊어 버렸지 만, grepl의 사용법은'? grepl'의 문서에서 다루고 있습니다. 일반적으로'x [grepl (patt, x)] <- y'와 같은 일을합니다. 'grep'은 벡터의 여러 인덱싱 방법 (논리적 인 또는 위치 번호로 R 인트로 튜토리얼에서 다루는) 덕분에 여기에서도 사용할 수 있습니다. – Frank

답변

5

대체 기능 is.na<-()과 함께 startsWith()을 사용할 수 있습니다. 은 R 문서 help(startsWith)에 따르면

is.na(fish$species) <- startsWith(fish$species, "M") 

,

startsWith()은 동등하지만 prefix 특수 정규 표현식 문자를 포함하지 않는 것입니다 grepl("^<prefix>", x)보다 훨씬 빠릅니다.

위의 코드는 문자 열을 전제로합니다. 요소 열의 경우 적절한 수준을 변경할 수 있습니다.

is.na(levels(fish$species)) <- startsWith(levels(fish$species), "M") 

또 다른 방법은 오른쪽 측면에 교체 NA를 사용하여, levels<-()로 교체하는 것입니다.

levels(fish$species)[startsWith(levels(fish$species), "M")] <- NA 

당신이 원하신다면 당신은 확실히 grepl()를 사용할 수 있습니다,하지만이 질문은 새로운 startsWith() 기능의 좋은 예 사용처럼 보인다.

또한 데이터 세트 iris에 대한 테스트가 완료되었습니다.

+0

그것은 일했다, 그것은 일했다! !!!!!!! 그래서 이것을하기 위해서 변수를 인자로 변경해야했습니다. 거대한 거래는 아니지만이를 유지할 방법이 있습니까? 요인으로 남겨두면 오류 (비 문자 객체)가 발생합니다. – newtoallthis

+1

is.na (fish $ species) <- startsWith (as.character (fish $ 종), "M")'을 사용하여 수행 할 수 있어야합니다. 그러면 벡터가 문자로 바뀌지 않습니다. –

+0

@newtoallthis - 나는 단지 그 사실을 알아 차렸다. 수정했습니다. –

관련 문제