не может визуализировать с помощью ggplot со значениями NA

Как указывали другие, вы не можете этого сделать. PHP имеет функцию constant(), которая не может быть вызвана непосредственно в строке, но мы можем легко обойти это.

$constant = function($cons){
   return constant($cons);
};

и базовый пример ее использования:

define('FOO', 'Hello World!');
echo "The string says {$constant('FOO')}"; 
2
задан jay.sf 23 February 2019 в 09:24
поделиться

2 ответа

Так что твой код на самом деле работает нормально для меня. Похоже, что это может быть проблемой с версиями пакетов, потому что кажется странным, что вы используете функцию plyr summarise.

Однако, вот немного более краткий способ создания этого графа (и, надеюсь, это полезно для всего, что вы хотите добавить к этому графику)

brfss_2013 %>%
  # Add count of income levels first (note this only adds a variable)
  add_count(incomeLev) %>%
  rename(count_inc = n) %>% 
  # Count observations per group (this transforms data)
  count(incomeLev, mentalHealth, count_inc) %>%
  rename(count_mentalHealth = n) %>% 
  mutate(percent= count_mentalHealth / count_inc) %>%
  ggplot(aes(x= incomeLev,
             y= count_mentalHealth,
             # Technically you don't need this group here but groups can be handy
             group= mentalHealth)) + 
  geom_bar(aes(fill=mentalHealth), 
           stat="identity")+ 
  # Using the scales package does the percent formatting for you
  geom_text(aes(label = scales::percent(percent)), vjust = 1)+
  theme_minimal()

Is this hovertext? [ 113]

0
ответ дан MokeEire 23 February 2019 в 09:24
поделиться

Прежде всего, ваш код работает невероятно хорошо, когда вы превращаете все в символ. Таким образом, вы можете просто сделать

brfss_2013[c("incomeLev", "mentalHealth")] <- 
  lapply(brfss_2013[c("incomeLev", "mentalHealth")], as.character)

и затем просто запустить свой код, как вы поняли.

Но, давайте сделаем это с факторами (в этом случае не запускайте строку lapply(.)!).

Требуется категория "missing", которую можно получить, добавив новый уровень "missing" для NA с.

levels(brfss_2013$incomeLev) <- c(levels(brfss_2013$incomeLev), "missing")
brfss_2013$incomeLev[is.na(brfss_2013$incomeLev)] <- "missing"

Затем, ваша агрегация (в базовой R-форме).

b1 <- with(brfss_2013, aggregate(list(count_mentalHealth=incomeLev), 
                        by=list(mentalHealth=mentalHealth, incomeLev=incomeLev), 
                        length))
b2 <- aggregate(mentalHealth ~ ., brfss_2013, length)
names(b2)[2] <- "count_inc"   
brfss_2013.agg <- merge(b1, b2)
rm(b1, b2)  # just to clean up

Добавить столбец "percent".

brfss_2013.agg$percent <- with(brfss_2013.agg, count_mentalHealth / count_inc)

Участок.

library(ggplot2)
ggplot(brfss_2013.agg, aes(x=incomeLev, y=count_mentalHealth, group=mentalHealth)) +
  geom_bar(aes(fill=mentalHealth), stat="identity") +
  geom_text(aes(label=sprintf("%0.1f%%", percent)), 
            position=position_stack(vjust=0.5))

Результат

enter image description here

0
ответ дан jay.sf 23 February 2019 в 09:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: