조건부로 열을 재정렬하려고하지만 함수 매개 변수에 의해 지정된 경우에만 해당됩니다. dplyr 문에 조건문을 추가하는 방법을 보여주는 다른 예제 (예 : this )가 있지만 작동하지 않습니다.
다음과 같은 두 개의 열이있는 데이터 세트가 있습니다.
Role
1 Primary
2 Secondary
3 Primary
4 Primary
Zap
1 Enabled
2 Disabled
3 Enabled
4 Enabled
그리고 내 코드는 다음과 같습니다.
my_bar_chart <- function(data, column, title, change_order=FALSE){
toReturn <- data %>%
group_by({{column}}) %>%
summarize(count = n()) %>%
mutate(percent = count/sum(count)) %>%
mutate(column = reorder({{column}}, -count, FUN=identity)) %>%
ggplot(aes(x=column, y=count)) +
xlab(title)+
geom_col(fill='#cccccc') +
geom_text(aes(label = paste0(round(100 * percent, 1), "%")))
return(toReturn)
}
p1 <- my_bar_chart(mydata, Role, "EA5 Controller Role", TRUE)
p2 <- my_bar_chart(mydata, Zap, "Another title", FALSE)
그리고 그것은 잘 작동하지만 이제 작동하려고 할 때 두 번째 mutate 문이 TRUE를 함수 change_order 매개 변수에 전달할 때 조건부로 재정렬합니다. 작동하지 않는 조건부 돌연변이는 다음과 같습니다.
mutate(column = case_when(
change_order == TRUE ~ reorder({{column}}, -count, FUN=identity),
change_order == FALSE ~ column)) %>%
이 오류가 발생합니다.
eval_tidy (pair $ rhs, env = default_env) 오류 : 'Role'개체를 찾을 수 없습니다.
내가 뭘 잘못하고 있는지 아이디어가 있습니까?
두 번째 조건은 동일해야하는 객체 와 함께 column
내부가 아닌 반환입니다.{{}}
type
my_bar_chart <- function(data, column, title, change_order=FALSE){
data %>%
group_by({{column}}) %>%
summarize(count = n()) %>%
mutate(percent = count/sum(count),
!! rlang::enquo(column) := case_when(change_order ~
reorder({{column}}, -count, FUN=identity), TRUE ~ factor({{column}})) ) %>%
ggplot(aes(x={{column}}, y=count)) +
xlab(title)+
geom_col(fill='#cccccc') +
geom_text(aes(label = paste0(round(100 * percent, 1), "%")))
}
-테스트
my_bar_chart(mydata, Role, "EA5 Controller Role", TRUE)
(가) 있습니다 reorder
내에서 삭제 될 것입니다 해당 열 몇 가지 특성을 창조하고 case_when
는 모두 표현이 동일한 구조의 출력을 기대하면서. 대신 if/else
여기에서 사용할 수 있습니다 .
my_bar_chart <- function(data, column, title, change_order=FALSE){
out <- data %>%
group_by({{column}}) %>%
summarize(count = n()) %>%
mutate(percent = count/sum(count),
!! rlang::enquo(column) := if(change_order)
reorder({{column}}, -count, FUN=identity) else {{column}} )
print(str(out))
ggplot(out, aes(x={{column}}, y=count)) +
xlab(title)+
geom_col(fill='#cccccc') +
geom_text(aes(label = paste0(round(100 * percent, 1), "%")))
}
-테스트
print
데이터 세트 구조의 출력 확인
my_bar_chart(mydata, Role, "EA5 Controller Role", TRUE)
#Classes ‘tbl_df’, ‘tbl’ and 'data.frame': 2 obs. of 3 variables:
# $ Role : Factor w/ 2 levels "Primary","Secondary": 1 2
# ..- attr(*, "scores")= int [1:2(1d)] -3 -1
# .. ..- attr(*, "dimnames")=List of 1
# .. .. ..$ : chr "Primary" "Secondary"
# $ count : int 3 1
# $ percent: num 0.75 0.25
NULL
my_bar_chart(mydata, Role, "EA5 Controller Role", FALSE)
#Classes ‘tbl_df’, ‘tbl’ and 'data.frame': 2 obs. of 3 variables:
# $ Role : chr "Primary" "Secondary"
# $ count : int 3 1
# $ percent: num 0.75 0.25
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다