2017-12-29 5 views
0

나는 여러 국가의 광대역 데이터에 대한 데이터 프레임을 가지고 있습니다 (예 : AT_df 가져옴). "ofWithTV"및 "ofwithFT"열은 문자 유형이며 각 사례 (광대역 오퍼링)에 TV 액세스 또는 고정 전화 액세스가 번들로 제공되는지 (둘 다 포함되거나 포함되지 않음) 여부를 나타냅니다.문자 값을 사용하여 데이터 프레임의 새 열을 채우기위한 논리 연산

ofWithTV ofWithFT 
no   no 
no   no 
no   no 
yes   no 
yes   no 
no   no 
no   yes 
no   yes 
no   yes 
no   yes 
yes   yes 
yes   yes 

나는 이러한 경우는 두 이벤트는 이벤트가 "예"이다 "아니오", "TV Doubleplay"있다 "Singleplay"라고해야한다 새 열 "ofProduct"을 만들; "아니오", "FT Doubleplay"이벤트가 "아니오"인 경우; "예"및 "Tripleplay"두 이벤트가 모두 "예"입니다. 이런 식으로 뭔가 :이 들어

ofWithTV ofWithFT ofProduct 
no   no   Singleplay 
no   no   Singleplay 
no   no   Singleplay 
yes   no   TV Doubleplay 
yes   no   TV Doubleplay 
no   no   Singleplay 
no   yes  FT Doubleplay 
no   yes  FT Doubleplay 
no   yes  FT Doubleplay 
no   yes  FT Doubleplay 
yes   yes  Tripleplay 
yes   yes  Tripleplay 

, 나는/삭제 기존 데이터를 덮어 쓰지 않고 새 값 "Singelplay, Doubleplay을 ..."할당 논리 연산을 필요로한다. 나는 이미 비슷한 것을 찾았지만 그 작업이 실제로 어떻게 작동 하는지를 알 수 없다/이해할 수 없다 ..

나는이 커뮤니티에 익숙하지 않고 R에 처음으로 익숙하다. 누군가가 도울 수 있기를 바랍니다.

답변

1

case_when을 사용할 수 있습니다.

library(dplyr) 

dat2 <- dat %>% 
    mutate(ofProduct = case_when(
    ofWithTV %in% "no" & ofWithFT %in% "no" ~ "Singleplay", 
    ofWithTV %in% "yes" & ofWithFT %in% "no" ~ "TV Doubleplay", 
    ofWithTV %in% "no" & ofWithFT %in% "yes" ~ "FT Doubleplay", 
    ofWithTV %in% "yes" & ofWithFT %in% "yes" ~ "Tripleplay" 
)) 
dat2 
# ofWithTV ofWithFT  ofProduct 
# 1  no  no Singleplay 
# 2  no  no Singleplay 
# 3  no  no Singleplay 
# 4  yes  no TV Doubleplay 
# 5  yes  no TV Doubleplay 
# 6  no  no Singleplay 
# 7  no  yes FT Doubleplay 
# 8  no  yes FT Doubleplay 
# 9  no  yes FT Doubleplay 
# 10  no  yes FT Doubleplay 
# 11  yes  yes Tripleplay 
# 12  yes  yes Tripleplay 

또는 먼저 룩업 테이블을 만든 다음 테이블을 원래 데이터 프레임에 조인 할 수 있습니다.

library(dplyr) 
library(tibble) 

look_up <- tribble(
    ~ofWithTV, ~ofWithFT, ~ofProduct, 
    "no"  , "no"  , "Singleplay", 
    "yes" , "no"  , "TV Doubleplay", 
    "no"  , "yes" , "FT Doubleplay", 
    "yes" , "yes" , "Tripleplay" 
) 

dat3 <- dat %>% 
    left_join(look_up, by = c('ofWithTV', "ofWithFT")) 
dat3 
# ofWithTV ofWithFT  ofProduct 
# 1  no  no Singleplay 
# 2  no  no Singleplay 
# 3  no  no Singleplay 
# 4  yes  no TV Doubleplay 
# 5  yes  no TV Doubleplay 
# 6  no  no Singleplay 
# 7  no  yes FT Doubleplay 
# 8  no  yes FT Doubleplay 
# 9  no  yes FT Doubleplay 
# 10  no  yes FT Doubleplay 
# 11  yes  yes Tripleplay 
# 12  yes  yes Tripleplay 

데이터

dat <- read.table(text = "ofWithTV ofWithFT 
no   no 
no   no 
no   no 
yes   no 
yes   no 
no   no 
no   yes 
no   yes 
no   yes 
no   yes 
yes   yes 
yes   yes", 
        header = TRUE, stringsAsFactors = FALSE) 
+1

고마워요! 완벽하게 일했습니다. – Luke666

관련 문제