R манипулирование данными

У меня есть следующий фрейм данных:

head(d,20)

                                        place        total      error       value
348                         Telecolumbus_GmbH          2          2           2
349                                telefonica          5          2           2
350                 SOCO_SoftCom_Datensysteme          1          2           2
351                          SWU_TeleNet_GmbH          1          2           2
352                                      dtag          5          2           2
353                                      dtag         23          2          14
354 Fachhochschule_Braunschweig/Wolfenbuettel          1          2           2
355       Unitymedia_dynamic_customer_IP_pool          3          2           2
356                                   EWE-TEL          3          2           2
357               QSC_AG_Dynamic_IP_Addresses          4          2           2
358                                telefonica          1          2           2
359                                telefonica          1          2           2
360                                      dtag          2          2           2
361                      Northern_Access_GmbH          2          2           2
362            WT-CMTS-PPPOE-PRIVATE-CUSTOMER          2          2           2
363                                      dtag         17          2           2
364                                DHCP_Space          5          2           2
365   Kabel_Deutschland_Breitband_Customer_14          3          2           2
366                                      dtag          5          2           2
367   Kabel_Deutschland_Breitband_Customer_20          6          2           2

Я хочу сделать основной сюжет, где place находится на оси х, а ось у имеет%(значение / общее), рассчитанное в соответствии с суммой каждого места.

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

ggplot(data = d,aes(x = factor(place),y = value/total)) + geom_bar(stat='identity') + theme(axis.text.x = element_text(angle = 90, hjust = 0.5))

1 ответ

Решение

Сначала вы должны суммировать ваш фрейм данных с plyr пакет, а затем создать барплот:

require(plyr)
require(ggplot2)

# summarise your dataframe into a new one
d2 <- ddply(d, .(place), summarise,
             tot = sum(total),
             err = sum(error),
             val = sum(value))

# create the plot
ggplot(data = d2, aes(x = place, y = val/tot)) + 
  geom_bar(stat='identity') + 
  theme(axis.text.x = element_text(angle = 90, hjust = 0.5))

В качестве альтернативы вы можете сделать это так:

# create a new variable first
d2$ratio <- d2$val / d2$tot

# create the plot
ggplot(data = d2, aes(x = place, y = ratio)) + 
  geom_bar(stat='identity') + 
  theme(axis.text.x = element_text(angle = 90, hjust = 0.5))

Результат первого подхода (выглядит одинаково для обоих решений для черчения):

Другие вопросы по тегам