[R] Different stack barplots - same color legends

P. Roberto Bakker
Wed, 31 Oct 2018 07:50:45 -0000

Thank you for you information. Package 'HH' is interesting.

Now I find another problem when using 'likert(teamq)'
I get an error message:
> likert(teamq)
Error in dimnames(x) <- `*vtmp*` :
  length of 'dimnames' [2] not equal to array extent

I checked:
> dim(teamq)
[1] 4 2
> ncol(teamq)
[1] 2
So it should be good.

I used 'make.names' , in case the spaces in the variable names would be
a
problem.
Same error.

What could I do?

Best and thank you in advance.
Roberto


Op ma 22 okt. 2018 om 20:10 schreef Richard M. Heiberger <rmh at
temple.edu>:

> Try the likert function in
> install.packages("HH) ## if necessary
> library(HH)
>
> Then using David Carlson's example teamq
> likert(teamq)
>
> Your example in the 1:30PM (Eastern Daylight Time) doesn't work.
> Error in revalue(teamq, c(`de situatie in zeer geringe mate van
> toepassing is\nvoor u of uw supervisorengroep` = "1",  :
>   x is not a factor or a character vector.
>
> There are many examples in
> ?likert
>
> Rich
>
>
> On Mon, Oct 22, 2018 at 1:30 PM, P. Roberto Bakker
> <robertobakker at gmail.com> wrote:
> > Dear David,
> >
> > Thank you for you quite response.
> > My apologies for not giving some sample data - this is due to AVG.
> > *But this minisample should not be a problem (all in Dutch)*:
> >  teamq
> > # A tibble: 4 x 2
> >   `Ik volg bijscholing om mijn opleiders-kwaliteiten op peil te
houden`
> >
> >   <chr>
> >
> > 1 de situatie in hoge mate van toepassing is voor u of uw
> > supervisorengroep
> > 2 de situatie in zeer hoge mate van toepassing is voor u of uw
> > supervisorengroep
> > 3 de situatie in zeer hoge mate van toepassing is voor u of uw
> > supervisorengroep
> > 4 de situatie in geringe mate van toepassing is voor u of uw
> > supervisorengroep
> >   `Ik weet precies wat de ?modernisering van de opleiding? inhoudt`
> >
> >   <chr>
> >
> > 1 de situatie in hoge mate van toepassing is voor u of uw
> > supervisorengroep
> > 2 de situatie in zeer hoge mate van toepassing is voor u of uw
> > supervisorengroep
> > 3 de situatie in zeer hoge mate van toepassing is voor u of uw
> > supervisorengroep
> > 4 de situatie in geringe mate van toepassing is voor u of uw
> > supervisorengroep
> >
> > As you see the likert items are in words, and I should change them in
> > nummeric - Am I correct?
> >
> > *To do this, I tried (see further below):*
> > plyr rename() ; I receive the message it should be a factor or
character
> > dplyr recode() ; same message
> > mapvalues() ; it should be atomic, so I used as.atomic(teamq) but then
I
> > receive the nummers a strings.
> >
> > *The syntaxes*
> > require(plyr)
> > example2 <- revalue(teamq,
> >                     c("de situatie in zeer geringe mate van
toepassing is
> > voor u of uw supervisorengroep"= "1",
> >                         "de situatie in geringe mate van
toepassing is
> voor
> > u of uw supervisorengroep"= "2",
> >                         "de situatie enigszins van toepassing is
voor u
> of
> > uw supervisorengroep"= "3",
> >                         "de situatie in hoge mate van toepassing
is voor
> u
> > of uw supervisorengroep"= "4",
> >                         "de situatie in zeer hoge mate van
toepassing is
> > voor u of uw supervisorengroep"= "5"))
> >
> > require(dplyr)
> > example2 <- recode(teamq,
> >                     c("de situatie in zeer geringe mate van
toepassing is
> > voor u of uw supervisorengroep"= "1",
> >                       "de situatie in geringe mate van toepassing
is
> voor u
> > of uw supervisorengroep"= "2",
> >                       "de situatie enigszins van toepassing is
voor u of
> uw
> > supervisorengroep"= "3",
> >                       "de situatie in hoge mate van toepassing is
voor u
> of
> > uw supervisorengroep"= "4",
> >                       "de situatie in zeer hoge mate van
toepassing is
> voor
> > u of uw supervisorengroep"= "5"))
> >
> > mapvalues(as.matrix(teamq), from = c("de situatie in zeer geringe
mate
> van
> > toepassing is voor u of uw supervisorengroep",
> >                         "de situatie in geringe mate van
toepassing is
> voor
> > u of uw supervisorengroep",
> >                         "de situatie enigszins van toepassing is
voor u
> of
> > uw supervisorengroep",
> >                         "de situatie in hoge mate van toepassing
is voor
> u
> > of uw supervisorengroep",
> >                         "de situatie in zeer hoge mate van
toepassing is
> > voor u of uw supervisorengroep"),
> >           to = c(1,2,3,4,5))
> >
> > What should I do?
> > Thank you in advance, Roberto
> >
> > Op ma 22 okt. 2018 om 17:13 schreef David L Carlson <dcarlson at
tamu.edu>:
> >
> >> Your example is not reproducible since you did not give us some
sample
> >> data. I suspect that your data frame consists of columns that
represent
> >> questions and rows that represent individuals who answered the
> questions.
> >> First create a simple example:
> >>
> >> set.seed(42)
> >> teamq <- data.frame(V1=sample(c(1, 2, 4, 5), 25, replace =
TRUE),
> >>      V2=sample(c(1, 2, 3, 4, 5), 25, replace=TRUE),
> >>      V3=sample(c(2, 3, 4, 5), 25, replace=TRUE))
> >>
> >> Notice that this data frame ONLY contains questions (and only 3
> >> questions). Here are 2 ways to get what you want. The first one
stacks
> the
> >> data:
> >>
> >> teamq.stack <- stack(teamq)
> >> str(teamq.stack)
> >> counts <- table(teamq.stack)
> >> str(counts)
> >>
> >> The second one converts each column to a factor with levels 1 - 5:
> >>
> >> teamq2 <- data.frame(lapply(teamq, factor, levels=1:5))
> >> str(teamq2)
> >> counts <- sapply(teamq2, table)
> >> str(counts)
> >>
> >> Now make the plots:
> >>
> >> cols <-
c("yellow","sandybrown","orange",
"darkolivegreen","green")
> >> barplot(counts[, 1], horiz=TRUE, col=cols, legend=TRUE)
> >> barplot(counts[, 2], horiz=TRUE, col=cols, legend=TRUE)
> >> barplot(counts[, 3], horiz=TRUE, col=cols, legend=TRUE)
> >>
> >> You will need to adjust the xlim= argument so that the legend does
not
> >> print on top of the bars.
> >>
> >> ----------------------------------------
> >> David L Carlson
> >> Department of Anthropology
> >> Texas A&M University
> >> College Station, TX 77843-4352
> >>
> >>
> >> -----Original Message-----
> >> From: R-help <r-help-bounces at r-project.org> On Behalf Of
P. Roberto
> Bakker
> >> Sent: Monday, October 22, 2018 9:04 AM
> >> To: R mailing list <r-help at r-project.org>
> >> Subject: [R] Different stack barplots - same color legends
> >>
> >> Hi,
> >>
> >> I want to make barplots from different questions (columns) in one
> >> data.frame.
> >> Each question has the same 5 likert items.
> >> Now the problem: in some questions all items are answered; in
other
> less.
> >> From the syntax below I get nice stack barplots - *but the legend
> colors do
> >> not* refer to the same likert-item, which I understand - the
colors go
> in
> >> sequence along the table.
> >> Question: how can I write a syntax that each likert-item has the
same
> >> legend color?
> >> Thank you in advance,
> >>
> >> Roberto
> >>
> >> SYNTAX:
> >> counts19 <- table(teamq[,19])
> >> counts20 <- table(teamq[,20])
> >> barplot(as.matrix(counts19), horiz = T,
> >>
col=c("yellow","sandybrown","orange",
"darkolivegreen","green"),
> >> legend=T)
> >> barplot(as.matrix(counts20), horiz = T,
> >>
col=c("yellow","sandybrown","orange",
"darkolivegreen","green"),
> >> legend=T)
> >>
> >>         [[alternative HTML version deleted]]
> >>
> >> ______________________________________________
> >> R-help at r-project.org mailing list -- To UNSUBSCRIBE and more,
see
> >> https://stat.ethz.ch/mailman/listinfo/r-help
> >> PLEASE do read the posting guide
> >> http://www.R-project.org/posting-guide.html
> >> and provide commented, minimal, self-contained, reproducible code.
> >>
> >
> >         [[alternative HTML version deleted]]
> >
> > ______________________________________________
> > R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see
> > https://stat.ethz.ch/mailman/listinfo/r-help
> > PLEASE do read the posting guide
> http://www.R-project.org/posting-guide.html
> > and provide commented, minimal, self-contained, reproducible code.