[R] Looking for a package to replace xtable

BR_email br at dmstat1.com
Fri Apr 21 20:22:24 CEST 2017


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.
>>>
>>>
>>>
>>
>>
>>
>



More information about the R-help mailing list