Зеркальная гистограмма, есть код, но вы обеспокоены тем, что отбрасываете данные? - PullRequest
0 голосов
/ 24 апреля 2020

Итак, я пытаюсь создать свои собственные зеркальные гистограммы в R. Пример их можно увидеть здесь: пример

Как и в примере, у меня есть две группы (диабетики и не диабетики). В каждой группе различное количество наблюдений, примерно 66 в одной и 288 в другой. Я нашел пример кода того, что я ищу, но когда я запускаю его, я получаю сообщение об ошибке:

Warning message:
Removed 222 rows containing non-finite values (stat_bin). 

Код, который я запускаю:

p <- ggplot(df, aes(x=x) ) +
  # Top
  geom_histogram( aes(x = group1, y = ..density..), fill="#ABABAB" ) +
  geom_label( aes(x=4.5, y=0.25, label="variable1"), color="#69b3a2") +
  # Bottom
  geom_histogram( aes(x = group2, y = -..density..), fill= "#545454") +
  geom_label( aes(x=4.5, y=-0.25, label="variable2"), color="#404080") +
  theme_bw() +
  xlab("value of x")

p

df это кадр данных из 2 столбцов, по одному для каждой группы. Столбцы имеют неравную длину, первый - 288, а второй - 66. Столбцы просто называются group1 и group2. Я беспокоюсь, если код отбрасывает действительные измерения из моей большой группы, ie первого столбца, тем более что разница между 288 и 66 равна 222.

1 Ответ

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

Если в каждой строке данные не «спарены», то не храните их так. Часто выводится (даже многими инструментами R), что каждое значение в строке data.frame сопряжено с другими значениями в этой строке, как если бы они были разными атрибутами или свойствами одного и того же «наблюдения». В вашем случае неравномерность приведет к (1) большому количеству NA значений, начинающих подобные предупреждения, или (2) потере данных (менее вероятно). Я полагаю, что это должно быть два столбца, возможно group (строка, указывающая diabeti c или нет) и value (некоторое значение).

Получение от ваших данных к этим данным может быть не сложным, возможно tidyr::pivot_longer или подобное.

Вот как я бы структурировал данные и использовал их:


set.seed(42)
dat <- data.frame(
  grp = sample(c("diabetic", "non-diabetic"), size=1000, replace=TRUE),
  stringsAsFactors = FALSE
)
dat$val <- ifelse(dat$grp == "diabetic", rnorm(1000), rnorm(1000, 2))
head(dat)
#            grp          val
# 1 non-diabetic  1.398617002
# 2 non-diabetic  1.864183863
# 3     diabetic -0.002456267
# 4 non-diabetic  2.831925015
# 5 non-diabetic  1.204940484
# 6 non-diabetic  2.340464612

ggplot(dat, aes(x = val)) +
  geom_histogram(aes(y = ..density..), fill = "gray", color = "black",
                 data = ~ subset(., grp == "diabetic")) +
  geom_histogram(aes(y = -..density..), fill = "gray60", color = "black",
                 data = ~ subset(., grp != "diabetic")) +
  geom_hline(yintercept = 0)

ggplot2 mirrors histogram

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