I am new to R and have a data formatting question. I need to transform this:
Poly Tran Strat Surv MALLP MALLS MALLG MALLF GADWP GADWS GADWG GADWF
AL 1 M y 1 2 0 0 1 4 0 0
ARL 1 M y 0 0 0 0 0 0 20 0
AM 1 M y 0 0 0 0 0 0 0 0
AM 2 M y 1 0 0 0 0 0 0 5
to this:
Poly Tran Strat Surv Spp Num Status
AL 1 M y mall 1 p
AL 1 M y mall 2 s
AL 1 M y gadw 1 p
AL 1 M y gadw 4 s
ARL 1 M y gadw 20 g
AM 2 M y mall 1 p
AM 2 M y gadw 5 f
I need some help!
Thankyou.
A solution using base R (except for reshape2::melt
):
dat2 <- reshape2::melt(dat, id.vars=c("Poly","Tran","Strat","Surv"))
dat2 <- subset(dat2, subset = value > 0)
dat2$variable <- as.character(dat2$variable)
dat2$Status <- with(dat2, substr(tolower(variable), nchar(variable), nchar(variable)))
dat2$variable <- with(dat2, substr(tolower(variable), 1, nchar(variable)-1))
dat2 <- dat2[order(dat2$Tran),]
colnames(dat2) <- c("Poly", "Tran", "Strat", "Surv", "Spp", "Num", "Status")
rownames(dat2) <- NULL
Results
> dat2
Poly Tran Strat Surv Spp Num Status
1 AL 1 M y mall 1 p
2 AL 1 M y mall 2 s
3 AL 1 M y gadw 1 p
4 AL 1 M y gadw 4 s
5 ARL 1 M y gadw 20 g
6 AM 2 M y mall 1 p
7 AM 2 M y gadw 5 f
Data
dat <- read.csv(text = "Poly,Tran,Strat,Surv,MALLP,MALLS,MALLG,MALLF,GADWP,GADWS,GADWG,GADWF
AL,1,M,y,1,2,0,0,1,4,0,0
ARL,1,M,y,0,0,0,0,0,0,20,0
AM,1,M,y,0,0,0,0,0,0,0,0
AM,2,M,y,1,0,0,0,0,0,0,5")