Dear all,
I have a dataframe which looks like this (dummy):
date<-c("jan", "feb", "mar", "apr",
"may", "june", "july",
"aug","sep","oct","nov","dec")
col1<-c(8.2,5.4,4.3,4.1,3.1,2.5,1.1,4.5,3.2,1.9,7.8,6.5)
col2<-c(3.1,2.3,4.7,6.9,7.5,1.1,3.6,8.5,7.5,2.5,4.1,2.3)
dum<-data.frame(cbind(date,col1,col2))
dum
date col1 col2
1 jan 8.2 3.1
2 feb 5.4 2.3
3 mar 4.3 4.7
4 apr 4.1 6.9
5 may 3.1 7.5
6 june 2.5 1.1
7 july 1.1 3.6
8 aug 4.5 8.5
9 sep 3.2 7.5
10 oct 1.9 2.5
11 nov 7.8 4.1
12 dec 6.5 2.3
I would like to convert this data.frame into something that looks like this:
date rainfall category
1 jan 8.2 col1
2 feb 5.4 col1
3 mar 4.3 col1
4 apr 4.1 col1
5 may 3.1 col1
6 june 2.5 col1
7 july 1.1 col1
8 aug 4.5 col1
9 sep 3.2 col1
10 oct 1.9 col1
11 nov 7.8 col1
12 dec 6.5 col1
1 jan 3.1 col2
2 feb 2.3 col2
3 mar 4.7 col2
4 apr 6.9 col2
5 may 7.5 col2
6 june 1.1 col2
7 july 3.6 col2
8 aug 8.5 col2
9 sep 7.5 col2
10 oct 2.5 col2
11 nov 4.1 col2
12 dec 2.3 col2
So the column-names become categories. The dataset is rather large with
many columns and a lengthy date-string. Is there an easy way to do this?
Thank you for your help,
Kind regards,
Saskia van Pelt
require(reshape2) melt(dum, id = 1) On Wednesday, March 16, 2011 at 9:28 AM, pelt wrote: Dear all,> > I have a dataframe which looks like this (dummy): > > date<-c("jan", "feb", "mar", "apr", "may", "june", "july", > "aug","sep","oct","nov","dec") > col1<-c(8.2,5.4,4.3,4.1,3.1,2.5,1.1,4.5,3.2,1.9,7.8,6.5) > col2<-c(3.1,2.3,4.7,6.9,7.5,1.1,3.6,8.5,7.5,2.5,4.1,2.3) > dum<-data.frame(cbind(date,col1,col2)) > dum > date col1 col2 > 1 jan 8.2 3.1 > 2 feb 5.4 2.3 > 3 mar 4.3 4.7 > 4 apr 4.1 6.9 > 5 may 3.1 7.5 > 6 june 2.5 1.1 > 7 july 1.1 3.6 > 8 aug 4.5 8.5 > 9 sep 3.2 7.5 > 10 oct 1.9 2.5 > 11 nov 7.8 4.1 > 12 dec 6.5 2.3 > > I would like to convert this data.frame into something that looks like this: > date rainfall category > 1 jan 8.2 col1 > 2 feb 5.4 col1 > 3 mar 4.3 col1 > 4 apr 4.1 col1 > 5 may 3.1 col1 > 6 june 2.5 col1 > 7 july 1.1 col1 > 8 aug 4.5 col1 > 9 sep 3.2 col1 > 10 oct 1.9 col1 > 11 nov 7.8 col1 > 12 dec 6.5 col1 > 1 jan 3.1 col2 > 2 feb 2.3 col2 > 3 mar 4.7 col2 > 4 apr 6.9 col2 > 5 may 7.5 col2 > 6 june 1.1 col2 > 7 july 3.6 col2 > 8 aug 8.5 col2 > 9 sep 7.5 col2 > 10 oct 2.5 col2 > 11 nov 4.1 col2 > 12 dec 2.3 col2 > > So the column-names become categories. The dataset is rather large with > many columns and a lengthy date-string. Is there an easy way to do this? > > Thank you for your help, > > Kind regards, > > Saskia van Pelt > > ______________________________________________ > R-help@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. >[[alternative HTML version deleted]]
Try this:
reshape(dum, direction = 'long', idvar = 'date', varying
list(c('col1', 'col2')))
On Wed, Mar 16, 2011 at 11:28 AM, pelt <pelt at knmi.nl>
wrote:> Dear all,
>
> I have a dataframe which looks like this (dummy):
>
> date<-c("jan", "feb", "mar",
"apr", "may", "june", "july",
>
"aug","sep","oct","nov","dec")
> col1<-c(8.2,5.4,4.3,4.1,3.1,2.5,1.1,4.5,3.2,1.9,7.8,6.5)
> col2<-c(3.1,2.3,4.7,6.9,7.5,1.1,3.6,8.5,7.5,2.5,4.1,2.3)
> dum<-data.frame(cbind(date,col1,col2))
> dum
> ?date col1 col2
> 1 ? jan ?8.2 ?3.1
> 2 ? feb ?5.4 ?2.3
> 3 ? mar ?4.3 ?4.7
> 4 ? apr ?4.1 ?6.9
> 5 ? may ?3.1 ?7.5
> 6 ?june ?2.5 ?1.1
> 7 ?july ?1.1 ?3.6
> 8 ? aug ?4.5 ?8.5
> 9 ? sep ?3.2 ?7.5
> 10 ?oct ?1.9 ?2.5
> 11 ?nov ?7.8 ?4.1
> 12 ?dec ?6.5 ?2.3
>
> I would like to convert this data.frame into something that looks like
this:
> ?date rainfall category
> 1 ? jan ?8.2 ?col1
> 2 ? feb ?5.4 ?col1
> 3 ? mar ?4.3 ?col1
> 4 ? apr ?4.1 ?col1
> 5 ? may ?3.1 ?col1
> 6 ?june ?2.5 ?col1
> 7 ?july ?1.1 ?col1
> 8 ? aug ?4.5 ?col1
> 9 ? sep ?3.2 ?col1
> 10 ?oct ?1.9 ?col1
> 11 ?nov ?7.8 ?col1
> 12 ?dec ?6.5 ?col1
> 1 ? jan ? 3.1 col2
> 2 ? feb ?2.3 col2
> 3 ? mar ?4.7 col2
> 4 ? apr ? 6.9 col2
> 5 ? may ? 7.5 col2
> 6 ?june ? 1.1 col2
> 7 ?july ? ?3.6 col2
> 8 ? aug ? 8.5 col2
> 9 ? sep ? 7.5 col2
> 10 ?oct ?2.5 col2
> 11 ?nov ?4.1 col2
> 12 ?dec ?2.3 col2
>
> So the column-names become categories. ?The dataset is rather large with
> many columns and a lengthy date-string. Is there an easy way to do this?
>
> Thank you for your help,
>
> Kind regards,
>
> Saskia van Pelt
>
> ______________________________________________
> 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.
>
--
Henrique Dallazuanna
Curitiba-Paran?-Brasil
25? 25' 40" S 49? 16' 22" O
Firstly, the way you have constructed your data frame in the example will
convert everything to factors. What you need to do is actually a bit simpler:
#######
dum <- data.frame(date, col1, col2)
#######
One way to turn this into the kind of data frame you want is to convert the main
part of it to a table first, and then coerce into a data frame:
#######
tab <- as.table(as.matrix(dum[, -1]))
row.names(tab) <- date
names(dimnames(tab)) <- c("date", "category")
Dum <- as.data.frame(tab, responseName = "rainfall")
Dum$date <- factor(Dum$date, levels = date)
#######
Here is a checK:
> head(Dum)
date category rainfall
1 jan col1 8.2
2 feb col1 5.4
3 mar col1 4.3
4 apr col1 4.1
5 may col1 3.1
6 june col1 2.5
> with(Dum, tapply(rainfall, date, mean))
jan feb mar apr may june july aug sep oct nov dec
5.65 3.85 4.50 5.50 5.30 1.80 2.35 6.50 5.35 2.20 5.95 4.40
Bill Venables.
-----Original Message-----
From: r-help-bounces at r-project.org [mailto:r-help-bounces at r-project.org]
On Behalf Of pelt
Sent: Thursday, 17 March 2011 12:28 AM
To: r-help at r-project.org
Subject: [R] making dataframes
Dear all,
I have a dataframe which looks like this (dummy):
date<-c("jan", "feb", "mar", "apr",
"may", "june", "july",
"aug","sep","oct","nov","dec")
col1<-c(8.2,5.4,4.3,4.1,3.1,2.5,1.1,4.5,3.2,1.9,7.8,6.5)
col2<-c(3.1,2.3,4.7,6.9,7.5,1.1,3.6,8.5,7.5,2.5,4.1,2.3)
dum<-data.frame(cbind(date,col1,col2))
dum
date col1 col2
1 jan 8.2 3.1
2 feb 5.4 2.3
3 mar 4.3 4.7
4 apr 4.1 6.9
5 may 3.1 7.5
6 june 2.5 1.1
7 july 1.1 3.6
8 aug 4.5 8.5
9 sep 3.2 7.5
10 oct 1.9 2.5
11 nov 7.8 4.1
12 dec 6.5 2.3
I would like to convert this data.frame into something that looks like this:
date rainfall category
1 jan 8.2 col1
2 feb 5.4 col1
3 mar 4.3 col1
4 apr 4.1 col1
5 may 3.1 col1
6 june 2.5 col1
7 july 1.1 col1
8 aug 4.5 col1
9 sep 3.2 col1
10 oct 1.9 col1
11 nov 7.8 col1
12 dec 6.5 col1
1 jan 3.1 col2
2 feb 2.3 col2
3 mar 4.7 col2
4 apr 6.9 col2
5 may 7.5 col2
6 june 1.1 col2
7 july 3.6 col2
8 aug 8.5 col2
9 sep 7.5 col2
10 oct 2.5 col2
11 nov 4.1 col2
12 dec 2.3 col2
So the column-names become categories. The dataset is rather large with
many columns and a lengthy date-string. Is there an easy way to do this?
Thank you for your help,
Kind regards,
Saskia van Pelt
______________________________________________
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.