Привет, я сделал эту функцию, которая берет таблицу и подготавливает этикетку для штрихового графика
prepare_labels <- function(ft){
labs <- ft
labs <- paste(labs, "\n", sep="")
labs <- paste(labs, round(prop.table(ft)*100,2), sep="")
labs <- paste(labs, "%", sep="")
return(labs)
}
На самом деле он работает нормально, но есть ли лучший способ написать эту функцию, приведенный выше код выглядит некрасиво, и я хочу написать красивый код :-)
Пример:
ft <- table(mydata$phone_partner_products)
prepare_labels(ft)
[1] "3752\n34.09%" "226\n2.05%" "2907\n26.41%" "1404\n12.76%" "1653\n15.02%"
[6] "1065\n9.68%"
3 ответа
Поскольку аргумент sep одинаков для всех вызовов вставки, вы можете объединить его в один:
labs <- paste(ft,"\n",round(prop.table(ft)*100,2),"%",sep="")
Или, используя ggplot2
:
ggplot(mtcars, aes(factor(cyl))) + geom_bar() + stat_bin(aes(label = paste(prop.table(..count..) * 100, "%", sep = "")), vjust = -0.2, geom = "text", position = "identity")
И получить что-то вроде этого:
альтернативный текст http://img532.imageshack.us/img532/8201/barplotwpct.png
Использование sprintf
:
sprintf("%d\n%2.2f%%", ft, prop.table(ft)*100)
Похожие вопросы
Связанные вопросы
Новые вопросы
r
R — это бесплатный язык программирования с открытым исходным кодом и программная среда для статистических вычислений, биоинформатики, визуализации и общих вычислений. Пожалуйста, используйте минимально воспроизводимые примеры, которые другие могут запустить с помощью копирования и вставки. Показать желаемый результат полностью. Используйте dput() для данных и укажите все небазовые пакеты с помощью library(). Не вставляйте изображения для данных или кода, вместо этого используйте блоки кода с отступом. Для вопросов по статистике используйте https://stats.stackexchange.com.
ggplot(mtcars, aes(factor(cyl))) + geom_bar() + scale_x_discrete(limits = c("6", "8", "4"))
. Вот официальная документация: had.co.nz/ggplot2/scale_discrete.htmlggplot(mtcars, aes(factor(cyl))) + geom_bar() + stat_bin(aes(label = paste(prop.table(..count..) * 100, "%", sep = "")), vjust = -0.2, geom = "text", position = "identity")
и этотggplot(mtcars, aes(factor(cyl))) + geom_bar() + scale_x_discrete(limits = c("6", "8", "4")) + stat_bin(aes(label = paste(prop.table(..count..) * 100, "%", sep = "")), vjust = -0.2, geom = "text", position = "identity")