[R] Trouble reshaping data to my satisfaction

Jim Lemon drjimlemon at gmail.com
Fri Mar 25 10:46:13 CET 2016


Hi Jennifer,
This is very hacky, but I think it does most of what you want. I can't
really work out what "Sample Size" is supposed to be:

MOERS<-data.frame(MOE[MOE$SEX_P=="Males_0.1",c("Meff","Proportion")],
 Males_0.1=MOE[MOE$SEX_P=="Males_0.1","MOE"],
 Females_0.1=MOE[MOE$SEX_P=="Females_0.1","MOE"],
 Males_0.2=MOE[MOE$SEX_P=="Males_0.2","MOE"],
 Females_0.2=MOE[MOE$SEX_P=="Females_0.2","MOE"],
 Males_0.3=MOE[MOE$SEX_P=="Males_0.3","MOE"],
 Females_0.3=MOE[MOE$SEX_P=="Females_0.3","MOE"],
 Males_0.4=MOE[MOE$SEX_P=="Males_0.4","MOE"],
 Females_0.4=MOE[MOE$SEX_P=="Females_0.4","MOE"],
 Males_0.5=MOE[MOE$SEX_P=="Males_0.5","MOE"],
 Females_0.5=MOE[MOE$SEX_P=="Females_0.5","MOE"])

Jim


On Fri, Mar 25, 2016 at 8:14 AM, Jennifer Sabatier
<plessthanpointohfive at gmail.com> wrote:
> #I am having a lot of trouble reshaping this data.
> #This is just an examination of sample size on the margin of error that I
> did for a colleague.
> #Nothing complicated.
> #But restructuring the data...another story
>
> #Here's code to produce the dataset:
>
>
> n <- seq(10000, 100000, by=10000)
>
> P <- seq(0.1, 0.5, by=0.1)
>
> Meff <- seq(3, 8, by=1)
>
>
> # 4 age groups by 2 sex categories - these are population distribution
> sizes - order is males 18-29, females 18-29, males 30-44,females 30-44,
> males 45-59, females 45-59, males 60+, females 60+
>
> Age1 <- data.frame(matrix(c(0.196598808, 0.224390935, 0.149289474,
> 0.151446387,0.08750253, 0.076399683, 0.060799283, 0.053572898), nrow=4,
> ncol=2, byrow=T, dimnames=list(seq(1,4, by=1), c("Males", "Females"))))
>
> MOE <- NULL
>
> for (i in n){
>    for (p in P){
>       for (m in Meff){
>          for (a in Age1[,1]){
>
>          ni <- i * a
>          M <- sqrt((1.92^2)*p*(1-p)*m/ni)
>   dta <- data.frame(a, i, ni, p, m, M)
>
>          colnames(dta) <- c("Proportion", "Total_n", "Stratum_n", "P",
> "Meff", "MOE")
>
>          dta$Sex <- "Males"
> MOE <- rbind(MOE, dta)
>
> }
>
>          for (a in Age1[,2]){
>
>          ni <- i * a
>          M <- sqrt((1.92^2)*p*(1-p)*m/ni)
>   dta <- data.frame(a, i, ni, p, m, M)
>
>          colnames(dta) <- c("Proportion", "Total_n", "Stratum_n", "P",
> "Meff", "MOE")
>
>          dta$Sex <- "Females"
> MOE <- rbind(MOE, dta)
>
> }
> }
> }
> }
>
> # What I want is data that looks like:
> # Meff  Proportion  Sample Size  Males_0.1 Females_0.1 Males_0.2
> Females_0.2 ..... Males_0.5 Females_0.5
>
> #I'm stumped on how to reshape this.
>
> #I tried this but it gave me the attached output (yuck):
>
>
> library(reshape2)
>
> library(plyr)
>
>
> tmp <- ddply(MOE, .(Meff), mutate, id=paste(Meff, Sex, seq_along(MOE)))
>
> wd <- dcast(tmp, id + Meff ~ P + Sex, value.var="MOE")
> ______________________________________________
> 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.



More information about the R-help mailing list