hello everyone,
i'm new to R, so i hope you dont mind a fairly basic R question. we're
using R to manipulate the results of SQL queries and create an HTML output.
I'm starting with a table that looks essentially like this:
Name Field1 Field2
John value1 value2
Jane value3 value4
My table is stored as a dataframe. I'd like to efficiently produce an
output that iterates through each row, transposes it and outputs an HTML
table (one per row). like this:
Name: John
Field1: value1
Field2: value2
Name: Jane
Field1: value3
Field2: value4
I can accomplish this by looping through each row, then outputting that
row's table. This gets the job done, but it seems there must be a better
way. I'm going to need to do this sort of conversion a lot,
so the simpler the better. is there a better way to approach it than the
code below? is there a more general term for the sort of transformation i'm
trying to make that might help guide my searching?
i realize i need to look into better methods of outputting HTML tables (like
r2html).
here's the basic idea. 'labkey.data' is the data frame produced by
my SQL
query:
D<-labkey.data
H<-colnames(D)
T<-t(D)
L<-length(D$id)
output <- ""
for(i in 1:L) {
R<-my.row <- D[i, ]
R<-t(R)
Len<-length(R)
output <- paste(output, "<table border=0>")
for(j in 1:Len) {
output <- paste(output,"<tr><td>",
H[j],":</td><td>", R[j], "</td>")
}
output <- paste(output, "</table><p>")
}
write(output, file="${htmlout:output}")
Thanks for any help.
--
View this message in context:
http://www.nabble.com/tranform-a-table--tp25382806p25382806.html
Sent from the R help mailing list archive at Nabble.com.
I think you could use reshape and ascii package here.
Create a file ("code.Rnw") with this code :
John and Jane
============
<<>>df <- data.frame(names = c("John",
"Jane"), field1 = c("value1", "value2"),
field2 = c("value3", "value4"))
library(reshape)
cdf <- cast(melt(df, id = "names"), variable ~ . | names)
@
<<results=ascii>>library(ascii)
ascii(cdf$Jane)
ascii(cdf$John)
@
Then from R, run :
Sweave("code.Rnw", RweaveAsciidoc)
Finally, use asciidoc <http://www.methods.co.nz/asciidoc/> to convert the
new file "code.txt" into html :
asciidoc code.txt
David
On Thu, Sep 10, 2009 at 15:10, bbimber <bimber at wisc.edu> wrote:
>
> hello everyone,
>
> i'm new to R, so i hope you dont mind a fairly basic R question.
we're
> using R to manipulate the results of SQL queries and create an HTML output.
> I'm starting with a table that looks essentially like this:
>
> Name Field1 Field2
> John value1 value2
> Jane value3 value4
>
> My table is stored as a dataframe. I'd like to efficiently produce an
> output that iterates through each row, transposes it and outputs an HTML
> table (one per row). like this:
>
> Name: John
> Field1: value1
> Field2: value2
>
> Name: Jane
> Field1: value3
> Field2: value4
>
> I can accomplish this by looping through each row, then outputting that
> row's table. This gets the job done, but it seems there must be a
better
> way. I'm going to need to do this sort of conversion a lot,
> so the simpler the better. is there a better way to approach it than the
> code below? is there a more general term for the sort of transformation
> i'm
> trying to make that might help guide my searching?
>
> i realize i need to look into better methods of outputting HTML tables
> (like
> r2html).
>
> here's the basic idea. 'labkey.data' is the data frame
produced by my SQL
> query:
>
> D<-labkey.data
> H<-colnames(D)
> T<-t(D)
> L<-length(D$id)
>
> output <- ""
>
> for(i in 1:L) {
> R<-my.row <- D[i, ]
> R<-t(R)
> Len<-length(R)
>
> output <- paste(output, "<table border=0>")
> for(j in 1:Len) {
> output <- paste(output,"<tr><td>",
H[j],":</td><td>", R[j], "</td>")
> }
>
> output <- paste(output, "</table><p>")
>
> }
>
> write(output, file="${htmlout:output}")
>
> Thanks for any help.
> --
> View this message in context:
> http://www.nabble.com/tranform-a-table--tp25382806p25382806.html
> Sent from the R help mailing list archive at Nabble.com.
>
> ______________________________________________
> R-help at r-project.org mailing list
> 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.
>
One could probably use one of the apply family of functions (apply,
lapply, sapply), but having looked into it a bit, I think it's
simpler to use an explicit loop. I doubt you'll encounter a need for
greater efficiency, in the cpu time sense, unless your tables are
huge.
But the looping can be written more simply:
require(xtable)
df <- data.frame(nm=letters[1:4], val1=1:4, val2=round(runif(4)))
for (i in seq(nrow(df))) {
print( xtable( t(df[i,])) , type='html', include.colnames=FALSE)
cat('<br>')
}
One of the other packages for writing html from R objects might have
a function that will automatically subset a dataframe in this
particular way, but it strikes me as somewhat unlikely.
-Don
At 6:10 AM -0700 9/10/09, bbimber wrote:>hello everyone,
>
>i'm new to R, so i hope you dont mind a fairly basic R question.
we're
>using R to manipulate the results of SQL queries and create an HTML output.
>I'm starting with a table that looks essentially like this:
>
>Name Field1 Field2
>John value1 value2
>Jane value3 value4
>
>My table is stored as a dataframe. I'd like to efficiently produce an
>output that iterates through each row, transposes it and outputs an HTML
>table (one per row). like this:
>
>Name: John
>Field1: value1
>Field2: value2
>
>Name: Jane
>Field1: value3
>Field2: value4
>
>I can accomplish this by looping through each row, then outputting that
>row's table. This gets the job done, but it seems there must be a
better
>way. I'm going to need to do this sort of conversion a lot,
>so the simpler the better. is there a better way to approach it than the
>code below? is there a more general term for the sort of transformation
i'm
>trying to make that might help guide my searching?
>
>i realize i need to look into better methods of outputting HTML tables (like
>r2html).
>
>here's the basic idea. 'labkey.data' is the data frame produced
by my SQL
>query:
>
>D<-labkey.data
>H<-colnames(D)
>T<-t(D)
>L<-length(D$id)
>
>output <- ""
>
>for(i in 1:L) {
>R<-my.row <- D[i, ]
>R<-t(R)
>Len<-length(R)
>
>output <- paste(output, "<table border=0>")
>for(j in 1:Len) {
>output <- paste(output,"<tr><td>",
H[j],":</td><td>", R[j], "</td>")
>}
>
>output <- paste(output, "</table><p>")
>
>}
>
>write(output, file="${htmlout:output}")
>
>Thanks for any help.
>--
>View this message in context:
>http://*www.*nabble.com/tranform-a-table--tp25382806p25382806.html
>Sent from the R help mailing list archive at Nabble.com.
>
>______________________________________________
>R-help at r-project.org mailing list
>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.
--
--------------------------------------
Don MacQueen
Environmental Protection Department
Lawrence Livermore National Laboratory
Livermore, CA, USA
925-423-1062