Справка по эпидемиологии коронавируса - необходимо составить гистограмму, показывающую частоту появления симптомов - PullRequest
1 голос
/ 26 марта 2020

У меня есть фрейм данных со списком симптомов в качестве первой строки, а 0 и 1 заполняют столбцы, указывающие, есть ли у каждого случая симптом или нет. Я хотел бы сделать гистограмму, показывающую частоту появления каждого симптома.

Например:

COVID

Fever   Cough    SOB   Fatigue  Results
1        1        0     1         Positive
0        1        1     1         Positive
1        0        1     1         Positive
1        1        1     1         Positive

Гистограмма должна иметь 4 бара: лихорадка (высота 3), кашель (высота 3), SOB (высота 3), усталость (высота 4).

В качестве дополнительного усложнения этот файл имеет как положительные, так и отрицательные случаи, и мне нужно брать эти данные только из положительных случаев. Я упустил все отрицательные случаи в моем примере выше для простоты.

Я пробовал это, но это работает только для одного симптома:

symptoms_plot <- ggplot(subset(COVID, Results == "Positive" & Cough == 1), aes(Cough)) + geom_bar()

Я также смог выделить только положительные случаи с этим:

split_by_result = split(COVID, COVID$Results)
split_by_result[["Positive"]]

Я понимаю, что было бы проще, если бы данные были отформатированы по-другому, однако это живой документ, и случаи добавляются ежедневно, и я не могу изменить способ добавления случаев.

Ответы [ 2 ]

3 голосов
/ 26 марта 2020

Соберите переменные и затем изобразите их.

library(tidyverse)

COVID %>%
  filter(Results=="Positive") %>%
  pivot_longer(cols=c("Fever","Cough","SOB","Fatigue")) %>%
  ggplot(aes(x=name, y=value)) +
  geom_bar(stat="identity")

enter image description here


Данные :

COVID <- read.table(text='
Case    Fever   Cough    SOB   Fatigue  Results
A        1        1        0     1         Positive
B        0        1        1     1         Positive
D        1        0        1     1         Positive
Z        1        1        1     1         Positive', header=TRUE, stringsAsFactors=FALSE)
1 голос
/ 26 марта 2020

Я добавил 2 отрицательные строки в ваши фиктивные данные для полноты (вы сказали, что не ставили ничего для простоты, но лучше включить все).

Во-первых, я хочу упомянуть тот факт, что вы упоминаете, было бы легче, если бы данные были отформатированы по-другому, это правда. Однако, даже если источником данных является «живой» документ, ничто не мешает вам обработать его непосредственно перед графиком!

# load data
dat <- "Case    Fever   Cough    SOB   Fatigue  Results
A        1        1        0     1         Positive
B        0        1        1     1         Positive
D        1        0        1     1         Positive
Z        1        1        1     1         Positive
X        1        1        1     1         Negative
Y        1        1        1     1         Negative"

dat <- read.table(text = dat, h=T)


library(ggplot2)
library(reshape2) # for melt


dat2plot <- dat[dat$Results == "Positive", ] # select positves
dat2plot <- melt(dat2plot) # format your data for ggplot

ggplot(dat2plot, aes(x = variable, y = value)) + geom_bar(stat = "identity")


# in a one-liner :
ggplot(melt(dat[dat$Results=="Positive",]), aes(x = variable, y = value)) + geom_bar(stat = "identity")

Это выведет ваш график: enter image description here

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