Reputation: 13
I am using ggplot to plot a dataset. The dataset is like this:
pr0 pr1
A1 0.1 0.9
A2 0.2 0.8
A3 0.7 0.3
Below is my code:
aggregate <- function(){agg.1 <- data
rownames(agg.1) <- colnames(Q)
agg <- melt(agg.1)
per.agg <- paste(round(100*(agg.1[,2]), 2), "%", sep="")
text <- paste(per.agg[1],"have A1","\n",
per.agg[2],"have A2","\n",
per.agg[3],"have A3","\n")
ggplot(data=agg,aes(x=agg[,1], y=agg[,3],fill=factor(agg[,2])))+
geom_bar(stat="identity",position = "stack")+
xlab("")+ylab("Aggregated Examinee Attribute Mastery Rate")+
ggtitle(text)
}
The problem is that the possible numbers in per.agg[_] may range from 1 to 100, and in "of examinees have mastered A1", "A1" could be from 1 to 100. Now I have listed three, but when I have four, for example,
pr0 pr1
A1 0.1 0.9
A2 0.2 0.8
A3 0.7 0.3
A4 0.3 0.7
I will need to add per.agg[4], and A4. The number will be the same as ncol(Q). How can I incorporate every possible number?
Upvotes: 0
Views: 41
Reputation: 10761
Here's an example which I think you could pretty quickly adapt to your situation:
set.seed(123)
df1 <- data.frame(x = letters[1:5],
y = rpois(5,5))
df1
# x y
# 1 a 4
# 2 b 7
# 3 c 4
# 4 d 8
# 5 e 9
sapply
, paste
, and specify collapse = ' \n '
paste(sapply(1:nrow(df1),
function(x) paste(df1[x,2], 'have', paste0('A',x))),
collapse = ' \n ')
# "4 have A1 \n 7 have A2 \n 4 have A3 \n 8 have A4 \n 9 have A5"
For your example, I think you'd replace 1:nrow(df1)
with 1:ncol(Q)
and df1[x,2]
with per.agg[x]
:
paste(sapply(1:ncol(Q),
function(x) paste(per.agg[x], 'have', paste0('A',x))),
collapse = ' \n ')
Upvotes: 1