Добавление среднего и стандартного отклонения к фрейму данных и построение графика в виде прямоугольника и точечной гистограммы - PullRequest
1 голос
/ 24 января 2020

Я пытаюсь рассчитать среднее значение и стандартное отклонение этого набора данных по каждому столбцу, а затем построить диаграмму.

вывод dput (DF)

    `structure(list(Cell_Type = structure(c(1L, 2L, 3L, 4L, 5L, 6L, 
    7L, 1L, 2L, 3L, 4L, 5L, 6L, 7L), .Label = c("Fibroblast", "T cell", 
    "Macrophage", "Tumor", "Islets of Langerhans", "Endothelial", 
    "B cell"), class = "factor"), Condition = structure(c(1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L), .Label = c("treated", 
    "untreated"), class = "factor"), Freq = c(6051L, 1892L, 1133L, 
    657L, 116L, 868L, 832L, 5331L, 3757L, 1802L, 835L, 287L, 704L, 
    256L), Percent = c(52.3941466793662, 16.3823707680319, 9.8103731924842, 
    5.68880422547407, 1.00441596675037, 7.51580223395965, 7.20408693393367, 
    41.0962072155412, 28.9623805118717, 13.8914585260561, 6.43694110391613, 
    2.21245760098674, 5.42707369719396, 1.97348134443417)), class = c("grouped_df", 
    "tbl_df", "tbl", "data.frame"), row.names = c(NA, -14L), groups = structure(list(
        Condition = structure(1:2, .Label = c("treated", "untreated"
        ), class = "factor"), .rows = list(1:7, 8:14)), row.names = c(NA, 
    -2L), class = c("tbl_df", "tbl", "data.frame"), .drop = TRUE))`

df <- structure(c(6051L, 1892L, 1133L, 893L, 148L, 868L, 5331L, 3757L, 
            1802L, 1061L, 2786L, 704L), .Dim = c(6L, 2L), .Dimnames = structure(list(c("Fibroblast", "T cell", "Macrophage", "Stellate", "Acinar", "Endothelial"), c("treated", "untreated")), .Names = c("", 
                                                                                                                                                                                                          "")), class = "table")
df <- data.frame(df)

, который дает следующий кадр данных:

          Var1      Var2 Freq
1   Fibroblast   treated 6051
2       T cell   treated 1892
3   Macrophage   treated 1133
4     Stellate   treated  893
5       Acinar   treated  148
6  Endothelial   treated  868
7   Fibroblast untreated 5331
8       T cell untreated 3757
9   Macrophage untreated 1802
10    Stellate untreated 1061
11      Acinar untreated 2786
12 Endothelial untreated  704

library(dplyr)
DF <- df %>% rename(Cell_Type = Var1, Condition = Var2) %>%
  group_by(Condition) %>% 
  mutate(Percent = Freq / sum(Freq)*100)

# A tibble: 12 x 4
# Groups:   Condition [2]
   Cell_Type   Condition  Freq Percent
   <fct>       <fct>     <int>   <dbl>
 1 Fibroblast  treated    6051   55.1 
 2 T cell      treated    1892   17.2 
 3 Macrophage  treated    1133   10.3 
 4 Stellate    treated     893    8.13
 5 Acinar      treated     148    1.35
 6 Endothelial treated     868    7.90
 7 Fibroblast  untreated  5331   34.5 
 8 T cell      untreated  3757   24.3 
 9 Macrophage  untreated  1802   11.7 
10 Stellate    untreated  1061    6.87
11 Acinar      untreated  2786   18.0 
12 Endothelial untreated   704    4.56

library(ggplot2)
ggplot(DF, aes(x = Condition, y = Percent, fill = Cell_Type))+
  geom_bar(stat = "identity")+
  geom_text(aes(label = paste(round(Percent,2),"%")), position = position_stack(vjust =  0.5))

Я создал гистограмму с накоплением, но теперь хочу сгенерировать гистограмму уклонения, чтобы показать бары ошибок. Как я go о создании коробчатого графика? Уклоненная гистограмма, показывающая бары ошибок?

1 Ответ

0 голосов
/ 24 января 2020

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

Сначала создайте фрейм данных:

df<-structure(list(Cell_Type = structure(c(1L, 2L, 3L, 4L, 5L, 6L, 
7L, 1L, 2L, 3L, 4L, 5L, 6L, 7L), .Label = c("Fibroblast", "T cell", 
"Macrophage", "Tumor", "Islets of Langerhans", "Endothelial", 
"B cell"), class = "factor"), Condition = structure(c(1L, 1L, 
1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L), .Label = c("treated", 
"untreated"), class = "factor"), Freq = c(6051L, 1892L, 1133L, 
657L, 116L, 868L, 832L, 5331L, 3757L, 1802L, 835L, 287L, 704L, 
256L), Percent = c(52.3941466793662, 16.3823707680319, 9.8103731924842, 
5.68880422547407, 1.00441596675037, 7.51580223395965, 7.20408693393367, 
41.0962072155412, 28.9623805118717, 13.8914585260561, 6.43694110391613, 
2.21245760098674, 5.42707369719396, 1.97348134443417)), class = c("grouped_df", 
"tbl_df", "tbl", "data.frame"), row.names = c(NA, -14L), groups = structure(list(
    Condition = structure(1:2, .Label = c("treated", "untreated"
    ), class = "factor"), .rows = list(1:7, 8:14)), row.names = c(NA, 
-2L), class = c("tbl_df", "tbl", "data.frame"), .drop = TRUE))

Затем ваша цель - проанализировать ваш набор данных столбец за столбцом. Есть несколько способов сделать это. В базе R вы можете вручную вычислить средние значения и стандартные отклонения:

mean(df$Freq); mean(df$Percent)
sd(df$Freq); sd(df$Percent)

Или, если все сделано в пакете, например, psych : require (psych) description (df)

В заключение, для построения блочного графика просто используйте подсказку box.plot для двух имеющихся у вас числовых переменных. Один за другим:

boxplot(df$Freq)
boxplot(df$Percent)

Или обе переменные на одном графике (но это не имеет никакого смысла, поскольку процент по сравнению с ним очень мал):

boxplot(df[,-1:-2])

И затем вы можете добавить заголовки, легенды, цвета и т. д. c с использованием типичного базового языка R, например:

boxplot(df[,-1:-2], col=c("red", "blue"), main="Box plot of frequencies and percentages", names=c("Frequencies", "Percentages"))

Удачи. И, пожалуйста, оставьте свой вопрос как вопрос в будущем!

...