-4

下面的示例代码(使用来自 productplots 或 ggmosaic 的快乐数据集)让我快速可视化按快乐(快乐)分解的各种分类变量(性别、婚姻、健康和学位)。为了做到这一点,我必须从“收集”函数中分离出我想要条件的变量,在这种情况下,“快乐”。但是如果我想改变这个变量呢?或者创造另一个组合?我将不得不不断地重现下面的代码并更改变量。有没有更快的方法来完成这个功能?purrr 包能以某种方式提供帮助吗?

Df1<-happy%>%
select(sex, happy, marital, health, degree)%>%
gather(key, value, -happy)%>%
count(happy, key, value)%>%
na.omit()%>%
mutate(perc=round(n/sum(n),2))

P<-ggplot(H5)+geom_col(aes(x=value,y=perc,fill=happy))+facet_wrap     
(~key,scales="free")+geom_text(aes
(x=value,y=perc,label=perc,group=happy),position=position_stack(vjust=.05))

我想要一个尽可能基于 Tidyverse 的解决方案。

4

1 回答 1

0

只要您查看的是同一组列,您就可以通过将其转换为您使用的每个函数的标准评估版本来将其包装在一个函数中。这是您的相同代码,只是经过调整以在函数中运行:

plotLook <- function(thisCol = "happy"){
  happy %>%
    select(sex, happy, marital, health, degree) %>%
    gather_("key", "value"
            , names(.)[names(.) != thisCol]
            )%>%
    count_(c(thisCol, "key", "value")) %>%
    na.omit() %>%
    mutate(perc=round(n/sum(n),2)) %>%
    ggplot() + 
    geom_col(aes_string(x="value",y="perc",fill=thisCol)) +
    facet_wrap(~key,scales="free") +
    geom_text(aes_string(x="value",y="perc"
                         ,label="perc",group= thisCol)
              ,position=position_stack(vjust=.05))
}

现在这个:

plotLook("sex")

生成:

在此处输入图像描述

更好的是,您可以使用lapply它一次生成所有图:

lapply(c("sex", "happy", "marital", "health", "degree"), plotLook)

并保存输出以使用/修改,或者让它们打印到屏幕上。

于 2017-01-23T14:20:29.500 回答