Masi Masi - 10 days ago 5
R Question

How to have many subscripts in this R read.csv for axis labels?

Data code

fem <- read.csv( text=
"female Bij,B11,B22,B33,B44,B21,B31,B32,B123
Sinus,1.0,0.0,0.0,0.0,0.0,0.0,12.0,0.0")


I would like to have subscripts instead like
expression(B[11])
so my pseudocode is

text=
paste0("female ", expression(B[ij]), expression(B[11]), ..., expression(B[123]))
Sinus,1.0,0.0,...")


Maybe, this can be done with a function better or later directly with
ggplot2
.
I plot the data eventually as where the data
B11,...,B123
is in
female.Bij


library("ggplot2")
g <- ggplot(datm, aes(variable, value, fill=gender)) + geom_bar(stat="identity", position = position_dodge()) + facet_grid(female.Bij ~ group) + xlab("Type")
#http://stackoverflow.com/a/17335258/54964
g + labs( y="Counts")


Testing rawr's answer



Before the operation and after the operation, my data set

[1] "hello ==="
male.Bij gender group variable
Arr/AHB :32 Length:128 Length:128 B11 :16
Digoxin arr :32 Class :character Class :character B22 :16
Furosemide arr:32 Mode :character Mode :character B33 :16
Sinus :32 B44 :16
B21 :16
B31 :16
(Other):32
value male.Nij
Min. : 0.000 Sinus :32
1st Qu.: 0.000 Arr/AHB :32
Median : 0.000 Digoxin arr :32
Mean : 1.407 Furosemide arr:32
3rd Qu.: 0.850
Max. :24.000

[1] "hello 2 ===="
male.Bij gender group variable
Arr/AHB :32 Length:128 Length:128 Length:128
Digoxin arr :32 Class :character Class :character Class :character
Furosemide arr:32 Mode :character Mode :character Mode :character
Sinus :32


Fig. 1 Output

enter image description here

Doing
g + scale_x_discrete(labels = parse(text = datm$variable))
gives me

enter image description here

R: 3.3.2

OS: Debian 8.5

Answer

parse(text=...)) is an easy way to turn strings into expressions especially useful for plotting

parse(text = c('B[ij]', 'B[12]'))
# expression(B[ij], B[12])

In your example you can insert the brackets and use parse/text

fem <- read.csv( text=
                   "female Bij,B11,B22,B33,B44,B21,B31,B32,B123
                 Sinus,1.0,0.0,0.0,0.0,0.0,0.0,12.0,0.0",
                 strip.white = TRUE)

datm <- reshape2::melt(fem)
datm <- within(datm, {
  variable <- gsub('(\\d+)', '[\\1]', variable)
})

library("ggplot2")
g <- ggplot(datm, aes(variable, value, fill=female.Bij)) +
  geom_bar(stat="identity", position = position_dodge()) +
  # facet_grid(female.Bij ~ group) +
  xlab("Type") 

g + labs( y="Counts") +
  scale_x_discrete(labels = parse(text = unique(datm$variable)),
                   breaks = unique(datm$variable))

enter image description here