Как агрегировать данные за каждый год на два, три, четыре ... года - PullRequest
0 голосов
/ 06 августа 2020

В последнее время я работаю над анализом данных о лекарствах от рака с использованием «блестящих» упаковок. На третьей вкладке я хотел бы агрегировать и суммировать значения каждого года по значениям определенного диапазона лет, например. на два года, например, 1984 ~ 1985, 1986 ~ 1987, ... или на пять лет, например, 1984 ~ 1988, 1989 ~ 1993, ... и т. д. c. Год начала и последний год тоже должны быть гибкими. В этом случае, если я устанавливаю интервал на 6 лет и выбираю год начала как 1990, а последний год как 2012, ось x тепловой диаграммы должна быть представлена ​​как 1990 ~ 1995, 1996 ~ 2001, 2002 ~ 2007, 2008 ~ 2012 год (всего пять лет вместо шести). Для меня это довольно сложно, и я ищу ответы, но не могу найти подходящего.

Код следующий. И данные доступны по гиперссылке . Спасибо!

library(ggplot2)
library(gapminder)
library(magrittr)
library(shiny)
library(tidyverse)
library(reshape)
library(tm)
library(dplyr)
library(data.table)
my_data=drug %>% distinct(drugbank, cancerType, .keep_all = TRUE)
my_druglist=my_data[!is.na(my_data$drugbank), ]
my_druglist=as.data.frame(gsub("[[:punct:]]", "", as.matrix(my_druglist))) 
A=table(my_druglist$cancerType)
B=as.data.frame(A)
Z=table(my_druglist$drugbank)
Y=as.data.frame(Z)
X=table(Y$Freq)
V=as.data.frame(X)
M=table(my_druglist$drugName,my_druglist$PMIDYear)
data_melt=melt(M)
ui = fluidPage(
  tags$script(type="text/javascript", src = "tabinfo.js"),
  titlePanel(div("藥物數據分析")),
  sidebarLayout(
    sidebarPanel(),
    mainPanel(
      tabsetPanel(              
        tabPanel(title = "各癌症藥物種數",
          selectInput(inputId="variable", label="Options:",
            choices=c("descending order"="reorder(Var1,Freq)","ascending order"="reorder(Var1,-Freq)")
          ),
          plotOutput(outputId ="CancerType")
        ),
      tabPanel(title = "藥物與文獻的關係",
        plotOutput(outputId ="papers")
        ),
      tabPanel(title = "每藥物於各年度的文獻發表數",
        sliderInput(inputId = "num",
                           label = "set the interval of years:",
                           value = 3, min = 1, max = 10),
        selectInput(inputId="start", label="The beginning year:",
                           selected=min(as.numeric(my_druglist$PMIDYear)),
                           choices=sort(unique(as.numeric(my_druglist$PMIDYear)))),
        selectInput(inputId="end", label="The last year:",
                           selected=max(as.numeric(my_druglist$PMIDYear)),
                           choices=sort(unique(as.numeric(my_druglist$PMIDYear)))),
        selectInput(inputId="order", label="Order:",
                           choices=c("from A to Z"="reorder(Var.1, desc(Var.1))","from Z to A"="Var.1","ascending order"="reorder(Var.1,-value)","descending order"="reorder(Var.1,value)")),
        plotOutput(outputId ="publishment")
        )
      )
    )
  )
)
server = function(input, output) {
  output$CancerType <- renderPlot({
    ggplot(data=D) +
      aes_string(x="Freq", y=input$variable)+
      geom_bar(stat="identity") +
      geom_text(aes(label=Freq), vjust=0, hjust=-0.5, size=3, col="red")+
      theme_minimal() +
      ggtitle("各癌症藥物種數") +
      xlab("藥物種數") + 
      ylab("癌症種類")
  },height =1200)
  output$papers <- renderPlot({
    ggplot(data=V, aes(x=Freq, y=Var1)) +
      geom_bar(stat="identity") +
      geom_text(aes(label=Freq), vjust=-0.5, hjust=0.5, size=4, col="red")+
      theme_minimal() +
      coord_flip()+
      ggtitle("藥物與文獻的關係") +
      ylab("藥物已有文獻之癌症數") + 
      xlab("藥物數")
  })
  output$publishment <- renderPlot({
    ggplot(data_melt%>% filter(Var.2 %in% (as.numeric(input$start):as.numeric(input$end))), aes_string("Var.2", input$order)) + 
      geom_tile(aes(fill=value))+
      labs(x="Years", y="Drugs", title="每藥物於各年度的文獻發表數")+
      scale_fill_gradient(low="white", high="royalblue4")+
      theme(axis.text.x = element_text(angle = 0, hjust = 0.5, vjust = 0.5))
  },height =4000)
}
shinyApp(ui = ui, server = server)

перевод: 藥物 數據 分析 анализ данных по лекарствам от рака 各 癌症 藥物 種 種 количество видов лекарств для каждого вида рака 藥物 與 文獻 的 關係 корреляция между лекарствами и бумагами 每 藥物 於 各 年度 的 文獻 發表 數 количество статей, публикуемых по каждому лекарству в год 藥物 (種) drug количество видов лекарств 癌症 type тип рака 藥物 已有 文獻 之 癌症 количество раковых заболеваний на основе статей о лекарствах

1 Ответ

0 голосов
/ 12 августа 2020

Самый простой способ сделать это - использовать "% /%", который генерирует целое число после деления значения на указанное число. А затем умножьте это целое число на указанное число. Вот код:

N$Var2=(as.numeric(as.numeric_version(N$Var2))%/%input$num)*input$num
Q=merge(x=aggregate(Freq~Var1+Var2,N,sum),y=N[,c("Var1","labels")],by="Var1", all.x = TRUE)

Надеюсь, это поможет любому, у кого есть подобная проблема, спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...