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))
Результат первого подхода (выглядит одинаково для обоих решений для черчения):