[R] chron: parsing dates into a data frame using a forloop

Benjamin M. Osborne Benjamin.Osborne at uvm.edu
Tue Jan 25 23:31:33 CET 2005


I have one data frame with a column of dates and I want to fill another data
frame with one column of dates, one of years, one of months, one of a unique
combination of year and month, and one of days, but R seems to have some
problems with this.  My initial data frame looks like this (ignore the NAs in
the other fields):

> mans[1:10,]
       date loc snow.new prcp tmin snow.dep tmax
1  11/01/54   2       NA   NA   NA       NA   NA
2  11/02/54   2       NA   NA   NA       NA   NA
3  11/03/54   2       NA   NA   NA       NA   NA
4  11/04/54   2       NA   NA   NA       NA   NA
5  11/05/54   2       NA   NA   NA       NA   NA
6  11/06/54   2       NA   NA   NA       NA   NA
7  11/07/54   2       NA   NA   NA       NA   NA
8  11/08/54   2       NA   NA   NA       NA   NA
9  11/09/54   2       NA   NA   NA       NA   NA
10 11/10/54   2       NA   NA   NA       NA   NA
>

The code and resultant data frame look like this:

> for(i in 1:10){
+ mans.met$date[i]<-mans$date[i]
+ mans.met$year[i]<-years(mans.met$date[i])
+ mans.met$month[i]<-months(mans.met$date[i])
+ mans.met$yearmo[i]<-cut(mans.met$date[i], "months")
+ mans.met$day[i]<-days(mans.met$date[i])
+ }
> mans.met[1:10,]
       date year month yearmo day snow.new snow.dep prcp tmin tmax tmean
1  11/01/54    1    11      1   1       NA       NA   NA   NA   NA    NA
2  11/02/54    1    11      1   2       NA       NA   NA   NA   NA    NA
3  11/03/54    1    11      1   3       NA       NA   NA   NA   NA    NA
4  11/04/54    1    11      1   4       NA       NA   NA   NA   NA    NA
5  11/05/54    1    11      1   5       NA       NA   NA   NA   NA    NA
6  11/06/54    1    11      1   6       NA       NA   NA   NA   NA    NA
7  11/07/54    1    11      1   7       NA       NA   NA   NA   NA    NA
8  11/08/54    1    11      1   8       NA       NA   NA   NA   NA    NA
9  11/09/54    1    11      1   9       NA       NA   NA   NA   NA    NA
10 11/10/54    1    11      1  10       NA       NA   NA   NA   NA    NA
>

The problem seems to be with assigning within the forloop, or making the
assignment into a data frame, since:

> years(mans.met$date[5])
[1] 1954
Levels: 1954
> test<-years(mans.met$date[5])
> test
[1] 1954
Levels: 1954
>
> months(mans.met$date[5])
[1] Nov
12 Levels: Jan < Feb < Mar < Apr < May < Jun < Jul < Aug < Sep < ... < Dec
> test<-months(mans.met$date[5])
> test
[1] Nov
12 Levels: Jan < Feb < Mar < Apr < May < Jun < Jul < Aug < Sep < ... < Dec
>
> cut(mans.met$date[3], "months")
[1] Nov 54
Levels: Nov 54
> test<-cut(mans.met$date[3], "months")
> test
[1] Nov 54
Levels: Nov 54
>
> days(mans.met$date[4])
[1] 4
31 Levels: 1 < 2 < 3 < 4 < 5 < 6 < 7 < 8 < 9 < 10 < 11 < 12 < 13 < ... < 31
> test<-days(mans.met$date[4])
> test
[1] 4
31 Levels: 1 < 2 < 3 < 4 < 5 < 6 < 7 < 8 < 9 < 10 < 11 < 12 < 13 < ... < 31
>

Any suggestions will be appreciated.
-Ben Osborne
-- 
Botany Department
University of Vermont
109 Carrigan Drive
Burlington, VT 05405

benjamin.osborne at uvm.edu
phone: 802-656-0297
fax: 802-656-0440




More information about the R-help mailing list