2017-12-03 1 views
0

제목이 내가 원하는 것처럼 명확하지 않을 수 있으므로 내가하려는 일의 예를 들려주십시오. 이 재현 코드가없는,하지만 도움이 될 경우 내가 재현 예를 추가 할 수 있습니다if 문에서 dplyr 조건부에 필터를 사용하십시오. R

library(dplyr) 
if(this_team != "") { 
    newdf <- mydf %>%  
     filter(team == this_team) %>% 
     mutate(totalrows = nrow(.)) %>% 
     group_by(x1, y1) %>% 
     summarize(dosomestuff) 
} else { 
    newdf <- mydf %>%  
     filter(firstname == this_name & lastname == that_name) %>% 
     mutate(totalrows = nrow(.)) %>% 
     group_by(x1, y1) %>% 
     summarize(dosomestuff) 
} 

내가 mydf의 dataframe에 일부 데이터 조작을하지 R에서 함수를 만드는 오전. 함수의 team_name 매개 변수에 값을 전달하면 'team'열을 사용하여 데이터 프레임을 필터링하고 싶습니다. team_name 매개 변수에 값을 전달하지 않으면 기본적으로 ""로되어 있고 대신 mydf의 'firstname'및 'lastname'열에 해당하는 this_name 및 that_name 값을 전달합니다.

두 개의 별도 if else 문에서 전체 dplyr 파이프 라인을 다시 생성하지 않고이 작업을 수행하는 더 좋은 방법이 있습니까? 코드의 실제 파이프 라인은 각각 4 줄보다 훨씬 길기 때문에 이와 같은 코드를 재현하는 것은 상당히 실망 스럽습니다.

답변

1

당신은 내가 간단한 드롭을 couldnt 생각으로이 간단 실현

library(dplyr) 
y <- "" 
data.frame(x = 1:5) %>% 
    {if (y=="") filter(., x>3) else filter(., x<3)} %>% 
    tail(1) 

또는

data.frame(x = 1:5) %>% 
filter(if (y=="") x>3 else x<3) %>% 
    tail(1) 

심지어는

mypipe <- . %>% tail(1) %>% print 
data.frame(x = 1:5) %>% mypipe 
+0

을 didnt의 정맥에 관을 저장 할 수 파이핑 중간에 if() 문이 있습니다. 감사! – Canovice