【问题标题】:How to manage column which doesn't exist while generating bar graph using pipe operator?使用管道运算符生成条形图时如何管理不存在的列?
【发布时间】:2021-06-26 12:59:37
【问题描述】:

我有许多数据框 school_skill_score_ff,其中包含三列“Skill_full_form”、“2020”、“2021”。我正在尝试为条形图创建管道。我的代码在这里。

school_bar<-school_skill_score_ff%>%
     e_chart(Skill_full_form,backgroundColor='#0d1117',center=c('50%','35%'))%>%
     e_bar(`2021`,label=list(show=TRUE,color='#fff',position='top'))%>%
     e_bar(`2020`,label=list(show=TRUE,color='#fff',position='top'))%>%  
     #e_tooltip(trigger = "axis")%>%
     e_tooltip(trigger = "axis",axisPointer=list(type='shadow'))%>%  
     #e_title("Skills Score") %>%
     e_theme("westeros")%>%
     e_toolbox_feature("dataZoom")%>%
     e_animation(duration = 2000)%>%
     e_hide_grid_lines('x')%>%
     e_y_axis(splitLine=list(lineStyle=list(color='#0f375f')),axisLabel=list(fontSize=10,color='#fff',fontWeight='normal'),name='Skill Score',nameLocation='middle',nameGap=30,nameColor='#fff')%>%  
     e_x_axis(axisLabel=list(rotate=16,fontSize=10,color='#fff',fontWeight='normal'))%>%  
     #e_axis_labels(x='Skill Name', y = "Skill Score")%>%
     e_y_axis(name='Skill Score',nameLocation='middle',nameGap=38,splitLine=list(lineStyle=list(color='#0f375f')))%>%
     #e_title("School Skill Score",top='0%',left='45%',textStyle=list(color='#fff'))%>%
      e_legend(top='8%',left='46%',textStyle=list(color='#fff'))%>%
      #e_title("School Skill Graph",textStyle=list(color='#fff',fontWeight='normal'),left='center',top='5%') %>%
      #e_x_axis(axisLabel=list(rotate=17,fontSize=12))%>%
      e_grid(show=TRUE,top='4%',width='90%',left='5%')#,name='Skill Names',nameGap=60,nameLocation='middle')

我的问题是我直接从 excel 文件中获取文件,并且许多文件没有“2020”列。这会产生错误。我想自动处理此错误,以便在第二列不存在时至少出现一列的图形。我正在使用 echarts4r 库。

【问题讨论】:

    标签: r echarts4r


    【解决方案1】:

    实现所需结果的一种方法是将数据重塑为长格式,在数据中添加一列 year,并在将数据传递给 e_charts 之前按 year 对数据进行分组。这样会自动处理不同的年数。

    使用一些玩具示例数据,这种方法可以正常工作两年...

    library(echarts4r)
    library(dplyr)
    library(tidyr)
    
    # Example data
    school_skill_score_ff <- data.frame(
      LETTERS[1:10],
      1:10,
      11:20
    )
    names(school_skill_score_ff) <- c("Skill_full_form", "2020","2021")
    
    school_skill_score_ff_long <- school_skill_score_ff %>% 
      tidyr::pivot_longer(-Skill_full_form, names_to = "year", values_to = "score")
    
    school_skill_score_ff_long %>%
      group_by(year) %>% 
      e_chart(Skill_full_form,backgroundColor='#0d1117',center=c('50%','35%'))%>%
      e_bar(score, label=list(show=TRUE,color='#fff',position='top'))
    

    以及仅存在于数据中的一年:

    # Now remove column 2020
    school_skill_score_ff <- select(school_skill_score_ff, -`2020`)
    
    school_skill_score_ff_long1 <- school_skill_score_ff %>% 
      tidyr::pivot_longer(-Skill_full_form, names_to = "year", values_to = "score")
    
    school_skill_score_ff_long1 %>%
      group_by(year) %>% 
      e_chart(Skill_full_form,backgroundColor='#0d1117',center=c('50%','35%'))%>%
      e_bar(score, label=list(show=TRUE,color='#fff',position='top'))
    

    【讨论】:

    • 嘿...谢谢。这是一项很棒的技术,否则我将使用 tryCatch。但这会使我的代码冗长。谢谢大佬
    猜你喜欢
    • 1970-01-01
    • 2015-08-16
    • 2018-02-06
    • 2021-09-18
    • 1970-01-01
    • 1970-01-01
    • 2020-07-09
    • 1970-01-01
    • 2022-06-29
    相关资源
    最近更新 更多