David: Hate to bother you, but because you have seen my code perhaps you can tell me what I am doing wrong. I want to replicate my original Response data by 0 times, called ResponseX10. All is good until the first calculation, cum_R. Would you kindly, assist me? Thanks. Bruce **** Response <- data.frame(Response=rbinom(50,1,0.2), yhat=runif(50)) Response <- Response[order(Response$yhat,decreasing=TRUE),] ResponseX10 <- do.call(rbind, replicate(10, Response, simplify=FALSE)) ResponseX10 <- ResponseX10[order(ResponseX10$yhat,decreasing=TRUE),] ResponseX10[[2]] <- NULL ResponseX10 cum_R <- cumsum(Response) cum_R ******* Bruce Ratner, Ph.D. The Significant Statistician? (516) 791-3544 Statistical Predictive Analtyics -- www.DMSTAT1.com Machine-Learning Data Mining and Modeling -- www.GenIQ.net David L Carlson wrote:> You can rename the columns with colnames() before passing it to xtable. This will let you use characters that data.frame would automatically convert. > > I don't see an easy way to center the columns when printing an html file. If you are not making too many of these, you could open the .html file into a WYSIWIG html editor such as BlueGriffon, make the changes and save the file. If you have Microsoft Excel and Word, another fallback solution is to read the .html file into Excel where you have a wide variety of styles. > > David C > > -----Original Message----- > From: BR_email [mailto:br at dmstat1.com] > Sent: Thursday, April 20, 2017 4:31 PM > To: David L Carlson <dcarlson at tamu.edu>; r-help at r-project.org > Subject: Re: [R] Looking for a package to replace xtable > > David: > All is perfect, almost - after I ran your corrections. > Is there a way I can have more control of the column names, i.e., > not be restricted to abbreviations headings, and center-justify? > > Thanks a lot, nice. > Bruce > > > > David L Carlson wrote: >> #1 You can remove the rownames by adding the argument include.rownames=FALSE to print.xtable(): >> >> print.xtable(DECILE_TABLE, type="html",file="DecileTable.html", include.rownames=FALSE) >> >> #2 Prevent data.frame from converting the first column to a factor and use NAs for the columns where you don't want totals: >> >> dec_mean_wt_R_nRDL <- cbind(DECILE, dec_mean_wt_R_nRD, Cum_Lift, stringsAsFactors=FALSE) >> dec_mean_wt_R_nRDL <- dec_mean_wt_R_nRDL[,c(1,3,4,9,8,10)] >> >> total_line<-cbind(DECILE="Total", >> as.data.frame(matrix(c(colSums(dec_mean_wt_R_nRDL[ , 2:3]), rep(NA, 3)),nrow=1))) >> >> Now the table should print without totals in the last three columns and no rownames. >> >> attach is discouraged since it can lead to confusion when a variable name exists in the environment and in a data frame (or multiple data frames). It is easy to forget which version of the variable you are using. More typing, but less subject to confusion would be to use with(), eg: >> >> Cum_RespRate <- with(dec_mean_wt_R_nR, (Cum_R/Cum_n)*100) >> >> This way it is always clear where Cum_R and Cum_n are coming from. In your code cum_R = Cum_R and cum_n = Cum_n so you could also use >> >> Cum_RespRate <- cum_R/cum_n)*100 >> >> ------------------------------------- >> David L Carlson >> Department of Anthropology >> Texas A&M University >> College Station, TX 77840-4352 >> >> -----Original Message----- >> From: R-help [mailto:r-help-bounces at r-project.org] On Behalf Of BR_email >> Sent: Thursday, April 20, 2017 12:10 PM >> To: r-help at r-project.org >> Subject: [R] Looking for a package to replace xtable >> >> R-helper: >> Below, code for generating a decile table. >> I am using the xtable package, but it is not quite right for the output. >> Issue #1. xtable inserts an unwanted column, before the first derived >> column DECILE >> Issue #2. In the last line "Total" I manually sum all columns, even >> though I only want the sums for second and third columns. >> If I calculate only second and third columns, the remaining columns >> would have NAs. >> Either scenario is not desired. >> >> Any suggestions, would be appreciated, for a package that addresses >> issue #1, >> and has an option for summing the desired two columns. >> >> Lastly, I read that one should rarely use "attach()", but if I don't the >> program will not run. >> An explanation of why I need attach() would also be appreciated. >> Thanks. >> Bruce >> >> **** >> Response <- data.frame(Response=rbinom(50,1,0.2), yhat=runif(50)) >> Response <- Response[order(Response$yhat,decreasing=TRUE),] >> >> Response[[2]] <- NULL >> >> cum_R <- cumsum(Response) >> sam_size <- nrow(Response) >> >> cum_n <- seq(1:1,sam_size) >> wt <- rep(c(1), times=sam_size) >> cum_wt <- cumsum(wt) >> >> dec <- (cum_n/sam_size) >> decc <- floor((cum_n*10)/(sam_size+1)) >> >> dec_mean <- aggregate(Response, by=list(decc), mean) >> >> dd_ <- data.frame(cum_R, sam_size, cum_wt, cum_n, decc) >> dd <- cbind(Response, dd_) >> names(dd)[2] <- "cum_R" >> >> dec_mean <- aggregate(Response ~ decc, dd, mean) >> >> wt <- rep(c(1), times=sam_size) >> cum_wt <- aggregate(wt ~ decc, dd, sum) >> cum_R <- aggregate(Response ~ decc, dd, sum) >> >> dec_mean_wt <- cbind(dec_mean, cum_wt) >> dec_mean_wt <- dec_mean_wt[-3] >> >> dec_mean_wt_R <- cbind(dec_mean_wt, cum_R) >> dec_mean_wt_R <- dec_mean_wt_R[-4] >> >> colnames(dec_mean_wt_R) <- c("Decile", "Resp_Rate", "No_Inds", >> "No_Resp") >> >> dec_mean_wt_R <- dec_mean_wt_R[,c(1,3,4,2)] >> >> cum_n <- dec_mean_wt_R[2] >> cum_n <- cumsum(cum_n) >> >> cum_R <- dec_mean_wt_R[3] >> cum_R <- cumsum(cum_R) >> >> dec_mean_wt_R_nR <- cbind(dec_mean_wt_R, cum_n, cum_R) >> >> colnames(dec_mean_wt_R_nR) <- >> c("Decile", "No_Inds", "No_Resp", "RespRate", >> "Cum_n", "Cum_R") >> >> dec_mean_wt_R_nR >> >> attach(dec_mean_wt_R_nR) >> Cum_RespRate <- (Cum_R/Cum_n)*100 >> >> options(digits=4) >> Decile_RespRate <- (No_Resp/No_Inds) >> >> dec_mean_wt_R_nRD <- cbind(dec_mean_wt_R_nR, Cum_RespRate, Decile_RespRate) >> >> avg_RR <- dec_mean_wt_R_nRD[10,7] >> Cum_Lift <- (Cum_RespRate/avg_RR)*100 >> >> DECILE <- c("top","2","3","4","5","6","7","8","9","bot") >> dec_mean_wt_R_nRDL <- cbind(DECILE, dec_mean_wt_R_nRD, Cum_Lift) >> dec_mean_wt_R_nRDL <- dec_mean_wt_R_nRDL[,c(1,3,4,9,8,10)] >> >> total_line<-cbind(DECILE="Total", >> as.data.frame(matrix(colSums(dec_mean_wt_R_nRDL[-1]),nrow=1))) >> >> names(total_line)<-names(dec_mean_wt_R_nRDL) >> dec_mean_wt_R_nRDLT<-rbind(dec_mean_wt_R_nRDL,total_line) >> decile_table <- dec_mean_wt_R_nRDLT >> decile_table >> >> #Install the xtable package: install.packages("xtable") >> #Load the xtable package: >> library(xtable) >> >> DECILE_TABLE <-xtable(decile_table) >> DECILE_TABLE >> >> print.xtable(DECILE_TABLE, type="html",file="C:/R_Data/DecileTable.html") >> >> **** >> >> -- >> >> ______________________________________________ >> 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. >> >> >> > > >
?? Works for me. Perhaps show us the output of sessionInfo(). Mine is: R version 3.3.3 (2017-03-06) Platform: x86_64-apple-darwin13.4.0 (64-bit) Running under: macOS Sierra 10.12.3 locale: [1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8 attached base packages: [1] stats graphics grDevices utils datasets methods base other attached packages: [1] lattice_0.20-34 backports_1.0.5 loaded via a namespace (and not attached): [1] tools_3.3.3 grid_3.3.3 --Bert Bert Gunter "The trouble with having an open mind is that people keep coming along and sticking things into it." -- Opus (aka Berkeley Breathed in his "Bloom County" comic strip ) On Fri, Apr 21, 2017 at 10:14 AM, BR_email <br at dmstat1.com> wrote:> David: > Hate to bother you, but because you have seen my code perhaps > you can tell me what I am doing wrong. > I want to replicate my original Response data by 0 times, called > ResponseX10. > All is good until the first calculation, cum_R. > Would you kindly, assist me? > Thanks. > Bruce > **** > Response <- data.frame(Response=rbinom(50,1,0.2), yhat=runif(50)) > Response <- Response[order(Response$yhat,decreasing=TRUE),] > > ResponseX10 <- do.call(rbind, replicate(10, Response, simplify=FALSE)) > > ResponseX10 <- ResponseX10[order(ResponseX10$yhat,decreasing=TRUE),] > > ResponseX10[[2]] <- NULL > ResponseX10 > > cum_R <- cumsum(Response) > cum_R > ******* > > Bruce Ratner, Ph.D. > The Significant Statistician? > (516) 791-3544 > Statistical Predictive Analtyics -- www.DMSTAT1.com > Machine-Learning Data Mining and Modeling -- www.GenIQ.net > > David L Carlson wrote: >> >> You can rename the columns with colnames() before passing it to xtable. >> This will let you use characters that data.frame would automatically >> convert. >> >> I don't see an easy way to center the columns when printing an html file. >> If you are not making too many of these, you could open the .html file into >> a WYSIWIG html editor such as BlueGriffon, make the changes and save the >> file. If you have Microsoft Excel and Word, another fallback solution is to >> read the .html file into Excel where you have a wide variety of styles. >> >> David C >> >> -----Original Message----- >> From: BR_email [mailto:br at dmstat1.com] >> Sent: Thursday, April 20, 2017 4:31 PM >> To: David L Carlson <dcarlson at tamu.edu>; r-help at r-project.org >> Subject: Re: [R] Looking for a package to replace xtable >> >> David: >> All is perfect, almost - after I ran your corrections. >> Is there a way I can have more control of the column names, i.e., >> not be restricted to abbreviations headings, and center-justify? >> >> Thanks a lot, nice. >> Bruce >> >> >> David L Carlson wrote: >>> >>> #1 You can remove the rownames by adding the argument >>> include.rownames=FALSE to print.xtable(): >>> >>> print.xtable(DECILE_TABLE, type="html",file="DecileTable.html", >>> include.rownames=FALSE) >>> >>> #2 Prevent data.frame from converting the first column to a factor and >>> use NAs for the columns where you don't want totals: >>> >>> dec_mean_wt_R_nRDL <- cbind(DECILE, dec_mean_wt_R_nRD, Cum_Lift, >>> stringsAsFactors=FALSE) >>> dec_mean_wt_R_nRDL <- dec_mean_wt_R_nRDL[,c(1,3,4,9,8,10)] >>> >>> total_line<-cbind(DECILE="Total", >>> as.data.frame(matrix(c(colSums(dec_mean_wt_R_nRDL[ , 2:3]), rep(NA, >>> 3)),nrow=1))) >>> >>> Now the table should print without totals in the last three columns and >>> no rownames. >>> >>> attach is discouraged since it can lead to confusion when a variable name >>> exists in the environment and in a data frame (or multiple data frames). It >>> is easy to forget which version of the variable you are using. More typing, >>> but less subject to confusion would be to use with(), eg: >>> >>> Cum_RespRate <- with(dec_mean_wt_R_nR, (Cum_R/Cum_n)*100) >>> >>> This way it is always clear where Cum_R and Cum_n are coming from. In >>> your code cum_R = Cum_R and cum_n = Cum_n so you could also use >>> >>> Cum_RespRate <- cum_R/cum_n)*100 >>> >>> ------------------------------------- >>> David L Carlson >>> Department of Anthropology >>> Texas A&M University >>> College Station, TX 77840-4352 >>> >>> -----Original Message----- >>> From: R-help [mailto:r-help-bounces at r-project.org] On Behalf Of BR_email >>> Sent: Thursday, April 20, 2017 12:10 PM >>> To: r-help at r-project.org >>> Subject: [R] Looking for a package to replace xtable >>> >>> R-helper: >>> Below, code for generating a decile table. >>> I am using the xtable package, but it is not quite right for the output. >>> Issue #1. xtable inserts an unwanted column, before the first derived >>> column DECILE >>> Issue #2. In the last line "Total" I manually sum all columns, even >>> though I only want the sums for second and third columns. >>> If I calculate only second and third columns, the remaining columns >>> would have NAs. >>> Either scenario is not desired. >>> >>> Any suggestions, would be appreciated, for a package that addresses >>> issue #1, >>> and has an option for summing the desired two columns. >>> >>> Lastly, I read that one should rarely use "attach()", but if I don't the >>> program will not run. >>> An explanation of why I need attach() would also be appreciated. >>> Thanks. >>> Bruce >>> >>> **** >>> Response <- data.frame(Response=rbinom(50,1,0.2), yhat=runif(50)) >>> Response <- Response[order(Response$yhat,decreasing=TRUE),] >>> >>> Response[[2]] <- NULL >>> >>> cum_R <- cumsum(Response) >>> sam_size <- nrow(Response) >>> >>> cum_n <- seq(1:1,sam_size) >>> wt <- rep(c(1), times=sam_size) >>> cum_wt <- cumsum(wt) >>> >>> dec <- (cum_n/sam_size) >>> decc <- floor((cum_n*10)/(sam_size+1)) >>> >>> dec_mean <- aggregate(Response, by=list(decc), mean) >>> >>> dd_ <- data.frame(cum_R, sam_size, cum_wt, cum_n, decc) >>> dd <- cbind(Response, dd_) >>> names(dd)[2] <- "cum_R" >>> >>> dec_mean <- aggregate(Response ~ decc, dd, mean) >>> >>> wt <- rep(c(1), times=sam_size) >>> cum_wt <- aggregate(wt ~ decc, dd, sum) >>> cum_R <- aggregate(Response ~ decc, dd, sum) >>> >>> dec_mean_wt <- cbind(dec_mean, cum_wt) >>> dec_mean_wt <- dec_mean_wt[-3] >>> >>> dec_mean_wt_R <- cbind(dec_mean_wt, cum_R) >>> dec_mean_wt_R <- dec_mean_wt_R[-4] >>> >>> colnames(dec_mean_wt_R) <- c("Decile", "Resp_Rate", "No_Inds", >>> "No_Resp") >>> >>> dec_mean_wt_R <- dec_mean_wt_R[,c(1,3,4,2)] >>> >>> cum_n <- dec_mean_wt_R[2] >>> cum_n <- cumsum(cum_n) >>> >>> cum_R <- dec_mean_wt_R[3] >>> cum_R <- cumsum(cum_R) >>> >>> dec_mean_wt_R_nR <- cbind(dec_mean_wt_R, cum_n, cum_R) >>> >>> colnames(dec_mean_wt_R_nR) <- >>> c("Decile", "No_Inds", "No_Resp", "RespRate", >>> "Cum_n", "Cum_R") >>> >>> dec_mean_wt_R_nR >>> >>> attach(dec_mean_wt_R_nR) >>> Cum_RespRate <- (Cum_R/Cum_n)*100 >>> >>> options(digits=4) >>> Decile_RespRate <- (No_Resp/No_Inds) >>> >>> dec_mean_wt_R_nRD <- cbind(dec_mean_wt_R_nR, Cum_RespRate, >>> Decile_RespRate) >>> >>> avg_RR <- dec_mean_wt_R_nRD[10,7] >>> Cum_Lift <- (Cum_RespRate/avg_RR)*100 >>> >>> DECILE <- c("top","2","3","4","5","6","7","8","9","bot") >>> dec_mean_wt_R_nRDL <- cbind(DECILE, dec_mean_wt_R_nRD, Cum_Lift) >>> dec_mean_wt_R_nRDL <- dec_mean_wt_R_nRDL[,c(1,3,4,9,8,10)] >>> >>> total_line<-cbind(DECILE="Total", >>> as.data.frame(matrix(colSums(dec_mean_wt_R_nRDL[-1]),nrow=1))) >>> >>> names(total_line)<-names(dec_mean_wt_R_nRDL) >>> dec_mean_wt_R_nRDLT<-rbind(dec_mean_wt_R_nRDL,total_line) >>> decile_table <- dec_mean_wt_R_nRDLT >>> decile_table >>> >>> #Install the xtable package: install.packages("xtable") >>> #Load the xtable package: >>> library(xtable) >>> >>> DECILE_TABLE <-xtable(decile_table) >>> DECILE_TABLE >>> >>> print.xtable(DECILE_TABLE, type="html",file="C:/R_Data/DecileTable.html") >>> >>> **** >>> >>> -- >>> >>> ______________________________________________ >>> 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. >>> >>> >>> >> >> >> > > ______________________________________________ > 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.
David: I tried somethings and got a little more working. Now, I am struck at last line provided: "dec_mean <- aggregate(Response ~ decc, dd, mean)" Any help is appreciated. Bruce ***** Resp <- data.frame(Response=rbinom(50,1,0.2), yhat=runif(50)) Resp <- Resp[order(Response$yhat,decreasing=TRUE),] ResponseX10 <- do.call(rbind, replicate(10, Resp, simplify=FALSE)) str(ResponseX10) ResponseX10 <- ResponseX10[order(ResponseX10$yhat,decreasing=TRUE),] str(ResponseX10) head(ResponseX10) ResponseX10[[2]] <- NULL ResponseX10 <- data.frame(ResponseX10) str(ResponseX10) cum_R <- cumsum(Response) cum_R sam_size <- nrow(ResponseX10) sam_size cum_n <- seq(1:1,sam_size) cum_n wt <- rep(c(1), times=sam_size) cum_wt <- cumsum(wt) cum_wt dec <- (cum_n/sam_size) decc <- floor((cum_n*10)/(sam_size+1)) str(decc) dec_mean <- aggregate(Response, by=list(decc), mean) dd_ <- data.frame(cum_R, sam_size, cum_wt, cum_n, decc) dd <- cbind(Response, dd_) names(dd)[2] <- "cum_R" dec_mean <- aggregate(Response ~ decc, dd, mean) ****** BR_email wrote:> David: > Hate to bother you, but because you have seen my code perhaps > you can tell me what I am doing wrong. > I want to replicate my original Response data by 0 times, called > ResponseX10. > All is good until the first calculation, cum_R. > Would you kindly, assist me? > Thanks. > Bruce > **** > Response <- data.frame(Response=rbinom(50,1,0.2), yhat=runif(50)) > Response <- Response[order(Response$yhat,decreasing=TRUE),] > > ResponseX10 <- do.call(rbind, replicate(10, Response, simplify=FALSE)) > > ResponseX10 <- ResponseX10[order(ResponseX10$yhat,decreasing=TRUE),] > > ResponseX10[[2]] <- NULL > ResponseX10 > > cum_R <- cumsum(Response) > cum_R > ******* > > Bruce Ratner, Ph.D. > The Significant Statistician? > (516) 791-3544 > Statistical Predictive Analtyics -- www.DMSTAT1.com > Machine-Learning Data Mining and Modeling -- www.GenIQ.net > > > David L Carlson wrote: >> You can rename the columns with colnames() before passing it to >> xtable. This will let you use characters that data.frame would >> automatically convert. >> >> I don't see an easy way to center the columns when printing an html >> file. If you are not making too many of these, you could open the >> .html file into a WYSIWIG html editor such as BlueGriffon, make the >> changes and save the file. If you have Microsoft Excel and Word, >> another fallback solution is to read the .html file into Excel where >> you have a wide variety of styles. >> >> David C >> >> -----Original Message----- >> From: BR_email [mailto:br at dmstat1.com] >> Sent: Thursday, April 20, 2017 4:31 PM >> To: David L Carlson <dcarlson at tamu.edu>; r-help at r-project.org >> Subject: Re: [R] Looking for a package to replace xtable >> >> David: >> All is perfect, almost - after I ran your corrections. >> Is there a way I can have more control of the column names, i.e., >> not be restricted to abbreviations headings, and center-justify? >> >> Thanks a lot, nice. >> Bruce >> >> >> David L Carlson wrote: >>> #1 You can remove the rownames by adding the argument >>> include.rownames=FALSE to print.xtable(): >>> >>> print.xtable(DECILE_TABLE, type="html",file="DecileTable.html", >>> include.rownames=FALSE) >>> >>> #2 Prevent data.frame from converting the first column to a factor >>> and use NAs for the columns where you don't want totals: >>> >>> dec_mean_wt_R_nRDL <- cbind(DECILE, dec_mean_wt_R_nRD, Cum_Lift, >>> stringsAsFactors=FALSE) >>> dec_mean_wt_R_nRDL <- dec_mean_wt_R_nRDL[,c(1,3,4,9,8,10)] >>> >>> total_line<-cbind(DECILE="Total", >>> as.data.frame(matrix(c(colSums(dec_mean_wt_R_nRDL[ , 2:3]), >>> rep(NA, 3)),nrow=1))) >>> >>> Now the table should print without totals in the last three columns >>> and no rownames. >>> >>> attach is discouraged since it can lead to confusion when a variable >>> name exists in the environment and in a data frame (or multiple data >>> frames). It is easy to forget which version of the variable you are >>> using. More typing, but less subject to confusion would be to use >>> with(), eg: >>> >>> Cum_RespRate <- with(dec_mean_wt_R_nR, (Cum_R/Cum_n)*100) >>> >>> This way it is always clear where Cum_R and Cum_n are coming from. >>> In your code cum_R = Cum_R and cum_n = Cum_n so you could also use >>> >>> Cum_RespRate <- cum_R/cum_n)*100 >>> >>> ------------------------------------- >>> David L Carlson >>> Department of Anthropology >>> Texas A&M University >>> College Station, TX 77840-4352 >>> >>> -----Original Message----- >>> From: R-help [mailto:r-help-bounces at r-project.org] On Behalf Of >>> BR_email >>> Sent: Thursday, April 20, 2017 12:10 PM >>> To: r-help at r-project.org >>> Subject: [R] Looking for a package to replace xtable >>> >>> R-helper: >>> Below, code for generating a decile table. >>> I am using the xtable package, but it is not quite right for the >>> output. >>> Issue #1. xtable inserts an unwanted column, before the first derived >>> column DECILE >>> Issue #2. In the last line "Total" I manually sum all columns, even >>> though I only want the sums for second and third columns. >>> If I calculate only second and third columns, the remaining columns >>> would have NAs. >>> Either scenario is not desired. >>> >>> Any suggestions, would be appreciated, for a package that addresses >>> issue #1, >>> and has an option for summing the desired two columns. >>> >>> Lastly, I read that one should rarely use "attach()", but if I don't >>> the >>> program will not run. >>> An explanation of why I need attach() would also be appreciated. >>> Thanks. >>> Bruce >>> >>> **** >>> Response <- data.frame(Response=rbinom(50,1,0.2), yhat=runif(50)) >>> Response <- Response[order(Response$yhat,decreasing=TRUE),] >>> >>> Response[[2]] <- NULL >>> >>> cum_R <- cumsum(Response) >>> sam_size <- nrow(Response) >>> >>> cum_n <- seq(1:1,sam_size) >>> wt <- rep(c(1), times=sam_size) >>> cum_wt <- cumsum(wt) >>> >>> dec <- (cum_n/sam_size) >>> decc <- floor((cum_n*10)/(sam_size+1)) >>> >>> dec_mean <- aggregate(Response, by=list(decc), mean) >>> >>> dd_ <- data.frame(cum_R, sam_size, cum_wt, cum_n, decc) >>> dd <- cbind(Response, dd_) >>> names(dd)[2] <- "cum_R" >>> >>> dec_mean <- aggregate(Response ~ decc, dd, mean) >>> >>> wt <- rep(c(1), times=sam_size) >>> cum_wt <- aggregate(wt ~ decc, dd, sum) >>> cum_R <- aggregate(Response ~ decc, dd, sum) >>> >>> dec_mean_wt <- cbind(dec_mean, cum_wt) >>> dec_mean_wt <- dec_mean_wt[-3] >>> >>> dec_mean_wt_R <- cbind(dec_mean_wt, cum_R) >>> dec_mean_wt_R <- dec_mean_wt_R[-4] >>> >>> colnames(dec_mean_wt_R) <- c("Decile", "Resp_Rate", "No_Inds", >>> "No_Resp") >>> >>> dec_mean_wt_R <- dec_mean_wt_R[,c(1,3,4,2)] >>> >>> cum_n <- dec_mean_wt_R[2] >>> cum_n <- cumsum(cum_n) >>> >>> cum_R <- dec_mean_wt_R[3] >>> cum_R <- cumsum(cum_R) >>> >>> dec_mean_wt_R_nR <- cbind(dec_mean_wt_R, cum_n, cum_R) >>> >>> colnames(dec_mean_wt_R_nR) <- >>> c("Decile", "No_Inds", "No_Resp", "RespRate", >>> "Cum_n", "Cum_R") >>> >>> dec_mean_wt_R_nR >>> >>> attach(dec_mean_wt_R_nR) >>> Cum_RespRate <- (Cum_R/Cum_n)*100 >>> >>> options(digits=4) >>> Decile_RespRate <- (No_Resp/No_Inds) >>> >>> dec_mean_wt_R_nRD <- cbind(dec_mean_wt_R_nR, Cum_RespRate, >>> Decile_RespRate) >>> >>> avg_RR <- dec_mean_wt_R_nRD[10,7] >>> Cum_Lift <- (Cum_RespRate/avg_RR)*100 >>> >>> DECILE <- c("top","2","3","4","5","6","7","8","9","bot") >>> dec_mean_wt_R_nRDL <- cbind(DECILE, dec_mean_wt_R_nRD, Cum_Lift) >>> dec_mean_wt_R_nRDL <- dec_mean_wt_R_nRDL[,c(1,3,4,9,8,10)] >>> >>> total_line<-cbind(DECILE="Total", >>> as.data.frame(matrix(colSums(dec_mean_wt_R_nRDL[-1]),nrow=1))) >>> >>> names(total_line)<-names(dec_mean_wt_R_nRDL) >>> dec_mean_wt_R_nRDLT<-rbind(dec_mean_wt_R_nRDL,total_line) >>> decile_table <- dec_mean_wt_R_nRDLT >>> decile_table >>> >>> #Install the xtable package: install.packages("xtable") >>> #Load the xtable package: >>> library(xtable) >>> >>> DECILE_TABLE <-xtable(decile_table) >>> DECILE_TABLE >>> >>> print.xtable(DECILE_TABLE, >>> type="html",file="C:/R_Data/DecileTable.html") >>> >>> **** >>> >>> -- >>> >>> ______________________________________________ >>> 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. >>> >>> >>> >> >> >> >
You have an issue at the top with Resp <- data.frame(Response=rbinom(50,1,0.2), yhat=runif(50)) Resp <- Resp[order(Response$yhat,decreasing=TRUE),] Since Response$yhat has not been defined at this point. Presumably you want Resp <- Resp[order(Resp$yhat,decreasing=TRUE),] The main issue is that you have a variable Response that is located in a data frame called ResponseX10. In creating cum_R you need cum_R <- with(ResponseX10, cumsum(Response)) then dec_mean dec_mean <- with(ResponseX10, aggregate(Response, by=list(decc), mean)) then dd dd <- with(ResponseX10, cbind(Response, dd_)) You might consider if Response really needs to be inside a data frame that consists of a single column (maybe you do if you need to keep track of the row numbers). If you just worked with the vector Response, you would not have to use with() or attach(). I'm not sure what the first few lines of your code are intended to do. You choose random binomial values and uniform random values and then order the first by the second. But rbinom() is selecting random values so what is the purpose of randomizing random values? If the real data consist of a vector of 1's and 0's and those need to be randomized, sample(data) will do it for you. Then those numbers are replicated 10 times. Why not just select 500 values using rbinom() initially? David C -----Original Message----- From: BR_email [mailto:br at dmstat1.com] Sent: Friday, April 21, 2017 1:22 PM To: David L Carlson <dcarlson at tamu.edu>; r-help at r-project.org Subject: Re: [R] Looking for a package to replace xtable David: I tried somethings and got a little more working. Now, I am struck at last line provided: "dec_mean <- aggregate(Response ~ decc, dd, mean)" Any help is appreciated. Bruce ***** Resp <- data.frame(Response=rbinom(50,1,0.2), yhat=runif(50)) Resp <- Resp[order(Response$yhat,decreasing=TRUE),] ResponseX10 <- do.call(rbind, replicate(10, Resp, simplify=FALSE)) str(ResponseX10) ResponseX10 <- ResponseX10[order(ResponseX10$yhat,decreasing=TRUE),] str(ResponseX10) head(ResponseX10) ResponseX10[[2]] <- NULL ResponseX10 <- data.frame(ResponseX10) str(ResponseX10) cum_R <- cumsum(Response) cum_R sam_size <- nrow(ResponseX10) sam_size cum_n <- seq(1:1,sam_size) cum_n wt <- rep(c(1), times=sam_size) cum_wt <- cumsum(wt) cum_wt dec <- (cum_n/sam_size) decc <- floor((cum_n*10)/(sam_size+1)) str(decc) dec_mean <- aggregate(Response, by=list(decc), mean) dd_ <- data.frame(cum_R, sam_size, cum_wt, cum_n, decc) dd <- cbind(Response, dd_) names(dd)[2] <- "cum_R" dec_mean <- aggregate(Response ~ decc, dd, mean) ****** BR_email wrote:> David: > Hate to bother you, but because you have seen my code perhaps > you can tell me what I am doing wrong. > I want to replicate my original Response data by 0 times, called > ResponseX10. > All is good until the first calculation, cum_R. > Would you kindly, assist me? > Thanks. > Bruce > **** > Response <- data.frame(Response=rbinom(50,1,0.2), yhat=runif(50)) > Response <- Response[order(Response$yhat,decreasing=TRUE),] > > ResponseX10 <- do.call(rbind, replicate(10, Response, simplify=FALSE)) > > ResponseX10 <- ResponseX10[order(ResponseX10$yhat,decreasing=TRUE),] > > ResponseX10[[2]] <- NULL > ResponseX10 > > cum_R <- cumsum(Response) > cum_R > ******* > > Bruce Ratner, Ph.D. > The Significant Statistician? > (516) 791-3544 > Statistical Predictive Analtyics -- www.DMSTAT1.com > Machine-Learning Data Mining and Modeling -- www.GenIQ.net > > > David L Carlson wrote: >> You can rename the columns with colnames() before passing it to >> xtable. This will let you use characters that data.frame would >> automatically convert. >> >> I don't see an easy way to center the columns when printing an html >> file. If you are not making too many of these, you could open the >> .html file into a WYSIWIG html editor such as BlueGriffon, make the >> changes and save the file. If you have Microsoft Excel and Word, >> another fallback solution is to read the .html file into Excel where >> you have a wide variety of styles. >> >> David C >> >> -----Original Message----- >> From: BR_email [mailto:br at dmstat1.com] >> Sent: Thursday, April 20, 2017 4:31 PM >> To: David L Carlson <dcarlson at tamu.edu>; r-help at r-project.org >> Subject: Re: [R] Looking for a package to replace xtable >> >> David: >> All is perfect, almost - after I ran your corrections. >> Is there a way I can have more control of the column names, i.e., >> not be restricted to abbreviations headings, and center-justify? >> >> Thanks a lot, nice. >> Bruce >> >> >> David L Carlson wrote: >>> #1 You can remove the rownames by adding the argument >>> include.rownames=FALSE to print.xtable(): >>> >>> print.xtable(DECILE_TABLE, type="html",file="DecileTable.html", >>> include.rownames=FALSE) >>> >>> #2 Prevent data.frame from converting the first column to a factor >>> and use NAs for the columns where you don't want totals: >>> >>> dec_mean_wt_R_nRDL <- cbind(DECILE, dec_mean_wt_R_nRD, Cum_Lift, >>> stringsAsFactors=FALSE) >>> dec_mean_wt_R_nRDL <- dec_mean_wt_R_nRDL[,c(1,3,4,9,8,10)] >>> >>> total_line<-cbind(DECILE="Total", >>> as.data.frame(matrix(c(colSums(dec_mean_wt_R_nRDL[ , 2:3]), >>> rep(NA, 3)),nrow=1))) >>> >>> Now the table should print without totals in the last three columns >>> and no rownames. >>> >>> attach is discouraged since it can lead to confusion when a variable >>> name exists in the environment and in a data frame (or multiple data >>> frames). It is easy to forget which version of the variable you are >>> using. More typing, but less subject to confusion would be to use >>> with(), eg: >>> >>> Cum_RespRate <- with(dec_mean_wt_R_nR, (Cum_R/Cum_n)*100) >>> >>> This way it is always clear where Cum_R and Cum_n are coming from. >>> In your code cum_R = Cum_R and cum_n = Cum_n so you could also use >>> >>> Cum_RespRate <- cum_R/cum_n)*100 >>> >>> ------------------------------------- >>> David L Carlson >>> Department of Anthropology >>> Texas A&M University >>> College Station, TX 77840-4352 >>> >>> -----Original Message----- >>> From: R-help [mailto:r-help-bounces at r-project.org] On Behalf Of >>> BR_email >>> Sent: Thursday, April 20, 2017 12:10 PM >>> To: r-help at r-project.org >>> Subject: [R] Looking for a package to replace xtable >>> >>> R-helper: >>> Below, code for generating a decile table. >>> I am using the xtable package, but it is not quite right for the >>> output. >>> Issue #1. xtable inserts an unwanted column, before the first derived >>> column DECILE >>> Issue #2. In the last line "Total" I manually sum all columns, even >>> though I only want the sums for second and third columns. >>> If I calculate only second and third columns, the remaining columns >>> would have NAs. >>> Either scenario is not desired. >>> >>> Any suggestions, would be appreciated, for a package that addresses >>> issue #1, >>> and has an option for summing the desired two columns. >>> >>> Lastly, I read that one should rarely use "attach()", but if I don't >>> the >>> program will not run. >>> An explanation of why I need attach() would also be appreciated. >>> Thanks. >>> Bruce >>> >>> **** >>> Response <- data.frame(Response=rbinom(50,1,0.2), yhat=runif(50)) >>> Response <- Response[order(Response$yhat,decreasing=TRUE),] >>> >>> Response[[2]] <- NULL >>> >>> cum_R <- cumsum(Response) >>> sam_size <- nrow(Response) >>> >>> cum_n <- seq(1:1,sam_size) >>> wt <- rep(c(1), times=sam_size) >>> cum_wt <- cumsum(wt) >>> >>> dec <- (cum_n/sam_size) >>> decc <- floor((cum_n*10)/(sam_size+1)) >>> >>> dec_mean <- aggregate(Response, by=list(decc), mean) >>> >>> dd_ <- data.frame(cum_R, sam_size, cum_wt, cum_n, decc) >>> dd <- cbind(Response, dd_) >>> names(dd)[2] <- "cum_R" >>> >>> dec_mean <- aggregate(Response ~ decc, dd, mean) >>> >>> wt <- rep(c(1), times=sam_size) >>> cum_wt <- aggregate(wt ~ decc, dd, sum) >>> cum_R <- aggregate(Response ~ decc, dd, sum) >>> >>> dec_mean_wt <- cbind(dec_mean, cum_wt) >>> dec_mean_wt <- dec_mean_wt[-3] >>> >>> dec_mean_wt_R <- cbind(dec_mean_wt, cum_R) >>> dec_mean_wt_R <- dec_mean_wt_R[-4] >>> >>> colnames(dec_mean_wt_R) <- c("Decile", "Resp_Rate", "No_Inds", >>> "No_Resp") >>> >>> dec_mean_wt_R <- dec_mean_wt_R[,c(1,3,4,2)] >>> >>> cum_n <- dec_mean_wt_R[2] >>> cum_n <- cumsum(cum_n) >>> >>> cum_R <- dec_mean_wt_R[3] >>> cum_R <- cumsum(cum_R) >>> >>> dec_mean_wt_R_nR <- cbind(dec_mean_wt_R, cum_n, cum_R) >>> >>> colnames(dec_mean_wt_R_nR) <- >>> c("Decile", "No_Inds", "No_Resp", "RespRate", >>> "Cum_n", "Cum_R") >>> >>> dec_mean_wt_R_nR >>> >>> attach(dec_mean_wt_R_nR) >>> Cum_RespRate <- (Cum_R/Cum_n)*100 >>> >>> options(digits=4) >>> Decile_RespRate <- (No_Resp/No_Inds) >>> >>> dec_mean_wt_R_nRD <- cbind(dec_mean_wt_R_nR, Cum_RespRate, >>> Decile_RespRate) >>> >>> avg_RR <- dec_mean_wt_R_nRD[10,7] >>> Cum_Lift <- (Cum_RespRate/avg_RR)*100 >>> >>> DECILE <- c("top","2","3","4","5","6","7","8","9","bot") >>> dec_mean_wt_R_nRDL <- cbind(DECILE, dec_mean_wt_R_nRD, Cum_Lift) >>> dec_mean_wt_R_nRDL <- dec_mean_wt_R_nRDL[,c(1,3,4,9,8,10)] >>> >>> total_line<-cbind(DECILE="Total", >>> as.data.frame(matrix(colSums(dec_mean_wt_R_nRDL[-1]),nrow=1))) >>> >>> names(total_line)<-names(dec_mean_wt_R_nRDL) >>> dec_mean_wt_R_nRDLT<-rbind(dec_mean_wt_R_nRDL,total_line) >>> decile_table <- dec_mean_wt_R_nRDLT >>> decile_table >>> >>> #Install the xtable package: install.packages("xtable") >>> #Load the xtable package: >>> library(xtable) >>> >>> DECILE_TABLE <-xtable(decile_table) >>> DECILE_TABLE >>> >>> print.xtable(DECILE_TABLE, >>> type="html",file="C:/R_Data/DecileTable.html") >>> >>> **** >>> >>> -- >>> >>> ______________________________________________ >>> 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. >>> >>> >>> >> >> >> >