2017-12-21 18 views
0

ifelse 문을 사용하는 변수에 대해 r의 case 문과 유사하게 수행하려고합니다. 예를 들어, 나는 다음과 같은 열 벡터가 있다고 할 수 있습니다 'Letter_Test'가 데이터 프레임에서 :사례 R이 같을 때 R

알파 - 테스트, 베타 테스트, 제타 테스트, 알파 - 두, 베타 - 두

나 ' 기본적으로 데이터가 알파 (Alpha)와 같고 '알파 (Alpha)'와 같은 경우에는 열 결과를 반환한다는 문구를 작성하고 싶습니다.

SQL에서 (Letter_Test LIKE '% Alpha %'그 다음 Alpha else 'Letter-Test'가 끝날 때).

+0

것은'참조 dplyr :: case_when' : https://www.rdocumentation.org/packages/dplyr/versions/0.7.3/topics/case_when 당신은'sqldf' 라이브러리를 사용하고 실제 사용할 수 있습니다 – www

+0

SQL 명령. 그렇지 않으면, 나는 정규식을 좋아한다. 'grepl ("Alpha", df $ Letter_Test, fixed = TRUE)'는 논리 벡터를 반환하므로'ifelse()'를 쉽게 래핑하여 값을 할당 할 수 있습니다. – Mako212

답변

0

내가 바로 질문을 가지고 있지만, 당신은 당신이 "알파"경우 테스트 할 말은 경우 열 문자에 있는지 확실하지 않습니다 -Test이면 다음과 같이 작동합니다.

> df <- data.frame("Letter-Test" = c("Alpha - Test", "Beta- Test", "Zeta-Test", "Alpha-Two", "Beta-Two"), 
+     stringsAsFactors = FALSE) 
> 
> ifelse(test = grepl("Alpha", df$Letter.Test), yes = "Alpha", no = df$Letter.Test) 
[1] "Alpha"  "Beta- Test" "Zeta-Test" "Alpha"  "Beta-Two" 

테스트가 TRUE 일 경우 거짓 d. 편지. 편지.

아니면 데이터 프레임의 새로운 열에 직접 결과를 넣을 수 있습니다 :

> df$AplhaTest <- ifelse(test = grepl("Alpha", df$Letter.Test), yes = "Alpha", no = df$Letter.Test) 
> df 
    Letter.Test AplhaTest 
1 Alpha - Test  Alpha 
2 Beta- Test Beta- Test 
3 Zeta-Test Zeta-Test 
4 Alpha-Two  Alpha 
5  Beta-Two Beta-Two 
+0

Grepl은 여기서 큰 성과를 거두었으며, 정확하게해야 할 일을 구현하기 쉽습니다. 감사! –

0

하나의 옵션 :

new_thing <- ifelse("Alpha" %in% df$Letter_Test, "Alpha", "Letter-Test") 

또 다른 옵션 : 사실

new_thing2 <- gsub(".*(Alpha).*", "\\1", df$Letter_Test) 
1

사용을 case_when()를 및 % % 술어처럼.

case_when(
     species %like% "Alpha"  ~ "Alpha", 
     TRUE      ~ "Alpha" 
    )