Привет, я сделал эту функцию, которая берет таблицу и подготавливает этикетку для штрихового графика

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%" 
r
4
Liborio Francesco Cannici 18 Июн 2010 в 18:59

3 ответа

Лучший ответ

Поскольку аргумент sep одинаков для всех вызовов вставки, вы можете объединить его в один:

labs <- paste(ft,"\n",round(prop.table(ft)*100,2),"%",sep="")
6
James 18 Июн 2010 в 19:09

Или, используя 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

5
aL3xa 19 Июн 2010 в 20:11
Это очень мило! Вы знаете, как изменить порядок столбцов с помощью ggplot. У меня 5 уровней, но они отображаются в неправильном порядке. "не_ знаю", "возможно_интересно", "не_интересно", "очень_интересно", "очень_не_интересно" И я бы хотел, чтобы они заказывались dont_know, очень_не_интересно, не_интересно, может быть_интересно, очень_интересно
 – 
Liborio Francesco Cannici
20 Июн 2010 в 16:03
Конечно, вы можете: ggplot(mtcars, aes(factor(cyl))) + geom_bar() + scale_x_discrete(limits = c("6", "8", "4")). Вот официальная документация: had.co.nz/ggplot2/scale_discrete.html
 – 
aL3xa
21 Июн 2010 в 04:05
Thabk you aL3xa ... Прошу прощения, что снова спрашиваю ... Это работает, но эта строка stat_bin (aes (label = paste (round ((prop.table (.. count ..) * 100), 2) , "%", sep = "")) возвращает порядок, как и раньше. Я предполагаю, это потому, что prop.table (.. count ..) имеет другой порядок. Любая идея, как мы можем определить порядок в prop.table
 – 
Liborio Francesco Cannici
21 Июн 2010 в 12:52
Отметьте этот: ggplot(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")
 – 
aL3xa
21 Июн 2010 в 18:34

Использование sprintf:

sprintf("%d\n%2.2f%%", ft, prop.table(ft)*100)
2
Marek 18 Июн 2010 в 19:25