Създайте барплот от две таблици с различна дължина

Изглежда не мога да разбера как да получа хубав барплот, който съдържа данните от две таблици, които съдържат различен брой колони.

Въпросните таблици са нещо като (изрязани някои данни от края):

> tab1
   1    2    3    6    8   31
5872 1525  831  521  299    4

> tab2
   1    2    3    4   22
7874  422    2    5    1

Имайте предвид, че имената и размерите на колоните са различни. Когато просто направя barplot() на една от тези таблици, тя излиза с диаграмата, която бих искал (показваща имената на колоните като X-ос, честоти по Y-ос). Но бих искал тези двамата един до друг.

Стигнах до създаването на рамка с данни, съдържаща и двете променливи като коментари и различните имена на редове в първата колона (с data.frame()и merge()), но когато начертая това, изглежда, че оста X е грешна. Опитът да пренаредя колоните ми дава изключение за различни дължини.

Код:

combined <- merge(data.frame(tab1), data.frame(tab2), by = c('Var1'), all=T)
barplot(t(combined[,2:3]), names.arg = combined[,1], beside=T)

Това показва диаграма, но не всички етикети присъстват и стойността за позиция 26 се изобразява след 33.

Има ли някакъв лесен начин този сюжет да работи? Решение ggplot2 би било хубаво.


person wds    schedule 13.03.2013    source източник
comment

Този изскачащ прозорец показва, че файлът се е променил, откакто сте го отворили. Същият тип предупреждение, което бихте получили в Notepad++, няма начин да деактивирате известието. Изглежда, че отваряте файлове, които други редактират по същото време.

  -  person Arun    schedule 13.03.2013
comment
добре, добавих командите, които използвах   -  person wds    schedule 13.03.2013


Отговори (1)


Можете да поставите всичките си данни в един кадър с данни (както в примера).

df<-data.frame(group=rep(c("A","B"),times=c(2,3)),
   values=c(23,56,345,6,7),xval=c(1,2,1,2,8))
  group values xval
1     A     23    1
2     A     56    2
3     B    345    1
4     B      6    2
5     B      7    8

Тогава ggplot() с geom_bar() може да се използва за изобразяване на данните.

ggplot(df,aes(xval,values,fill=group))+
  geom_bar(stat="identity",position="dodge")
person Didzis Elferts    schedule 13.03.2013
comment
Благодаря. Командата, която използвах, за да получа рамката с данни по този начин, беше df <- data.frame(group=rep(c("A", "B"), times=c(length(tab1), length(tab2))), values=c(tab1, tab2), xval=as.numeric(c(names(tab1), names(tab2))) - person wds; 13.03.2013