[R] Transforming data for nice output table
Paul Johnson
p@u|john32 @end|ng |rom gm@||@com
Wed Aug 22 00:13:52 CEST 2018
On Mon, Aug 20, 2018 at 2:17 PM David Doyle <kydaviddoyle using gmail.com> wrote:
>
> Hello everyone,
>
> I'm trying to generate tables of my data out of R for my report.
>
> My data is setup in the format as follows and the example can be found at:
> http://doylesdartden.com/R/ExampleData.csv
>
> Location Date Year GW_Elevation
> 127(I) 5/14/2006 2006 752.46
> 119(I) 5/14/2006 2006 774.67
> 127(I) 6/11/2007 2007 752.06
> 119(I) 6/11/2007 2007 775.57
>
> I would like to generate a table that showed
>
> Location GW_Elevation 2006 GW_Elevation 2007 GW_Elevation xxx.....
>
> 119(I) 774.67 775.57
> xxxx
> 127(I) 752.46 752.06
> xxxx
> XXXX XX XX
>
> Any thoughts on how to transform the data so it would be in this format??
>
> Thank you for your time
>
> David Doyle
Dear David
I'd consider studying R's reshape function, it was intended exactly
for this purpose. No reason to adventure into any user-contributed
tidy places to get this done.
dta <- read.csv("http://doylesdartden.com/R/ExampleData.csv")
dta <- dta[c("Location", "Year", "GW_Elevation")]
dta.wide <- reshape(dta, direction = "wide", idvar = "Location",
v.names = "GW_Elevation", timevar = "Year")
head(dta.wide)
Location GW_Elevation.2006 GW_Elevation.2007 GW_Elevation.2008
1 127(I) 752.46 NA 757.50
2 119(S) 774.67 778.76 776.40
3 132(I) 759.45 761.68 764.27
4 132(S) 761.77 761.04 765.44
5 111(I) 753.52 763.24 764.24
6 111(S) 766.18 772.84 767.41
GW_Elevation.2009 GW_Elevation.2010 GW_Elevation.2011 GW_Elevation.2012
1 759.90 756.40 759.05 759.31
2 777.59 777.45 778.21 778.13
3 761.90 764.03 763.63 763.99
4 761.21 763.12 762.69 759.57
5 750.85 764.37 762.99 763.90
6 769.77 767.88 767.95 767.19
GW_Elevation.2013 GW_Elevation.2014 GW_Elevation.2015 GW_Elevation.2016
1 756.07 756.66 757.72 757.66
2 778.88 778.28 775.16 778.28
3 761.22 762.81 762.36 764.46
4 763.19 763.87 761.94 763.90
5 764.42 761.65 764.02 762.93
6 770.20 767.25 767.74 766.87
The main difference between this and your stated target is that your
target column names have spaces in them, which are forbidden in
column names of data frames. Here R used a period for joining strings.
You can override
that if you want to with the reshape function, but usually I'd let the periods
happen.
If you do want to replace period with spaces, it can be done, but you
break the warranty
on other uses of a data frame. (Could get rid of underscore after GW
in same way)
colnames(dta.wide) <- sub("Elevation.", "Elevation ",
colnames(dta.wide), fixed = TRUE)
I'd not try to use that wide frame for many other purposes because of
the spaces, but it works well if you want to make a pleasant table out
of it. For example, xtable is my favorite:
library(xtable)
xt <- xtable(dta.wide)
print(xt)
The latex from that prints out beautifully in a document. The print
method for xtable has a file parameter if you want to save the file.
Good Luck
pj
>
> [[alternative HTML version deleted]]
>
> ______________________________________________
> R-help using 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.
--
Paul E. Johnson http://pj.freefaculty.org
Director, Center for Research Methods and Data Analysis http://crmda.ku.edu
To write to me directly, please address me at pauljohn at ku.edu.
More information about the R-help
mailing list