[R] coercing a list to a data frame, lists in foreloops
Benjamin M. Osborne
Benjamin.Osborne at uvm.edu
Mon Jan 31 20:46:01 CET 2005
I have a set of time-series climate data with missing entries. I need to add
rows for these missing entries to this data set. The only way I know to do
this is unsing a foreloop, but this won't work on a list. I've tried to
convert the list to a data frame, but that won't happen, either.
I want to fill rows in this table:
> newtest[10:15,]
yrmos yearmo snow.sum snow.mean snow.dep.mean prcp.sum prcp.mean tmin.min
10 195410 NA NA NA NA NA NA NA
11 195411 NA NA NA NA NA NA NA
12 195412 NA NA NA NA NA NA NA
13 195501 NA NA NA NA NA NA NA
14 195502 NA NA NA NA NA NA NA
15 195503 NA NA NA NA NA NA NA
tmin.mean tmax.max tmax.mean tmean.mean
10 NA NA NA NA
11 NA NA NA NA
12 NA NA NA NA
13 NA NA NA NA
14 NA NA NA NA
15 NA NA NA NA
>
from this one:
> mansNew[10:15,]
yearmo snow.sum snow.mean snow.dep.mean prcp.sum prcp.mean tmin.min
10 195508 0.000 0.0000000 0.00000 29.5910 0.9545484 NA
11 195509 0.000 0.0000000 0.00000 9.1948 0.3064933 NA
12 195510 20.320 0.6554839 NA 13.8684 0.4473677 NA
13 195511 NA NA NA NA NA -18.88889
14 195512 52.324 1.6878710 53.01226 6.4770 0.2089355 NA
15 195601 46.736 1.5076129 NA 8.0264 0.2589161 NA
tmin.mean tmax.max tmax.mean tmean.mean
10 NA NA NA NA
11 NA NA NA NA
12 NA NA NA NA
13 -8.62963 12.2222222 -0.6481481 -4.638889
14 NA -0.5555556 -9.3906810 NA
15 NA NA NA NA
>
This may be a problem:
> newtest<-as.data.frame(newtest)
> mode(newtest) ## returns "list"
[1] "list"
>
> mansNew<-as.data.frame(mansNew)
> mode(mansNew) ## returns "list"
[1] "list"
>
I've checked to make sure each column is a vector, but the coercion still is not
allowed.
This is the code with which I'm attempting to perform this manipulation, as well
as the result:
> for (i in 1:100){
+ newtest[i,2:12]<-ifelse(is.element(newtest$yrmos[i],mansNew$yearmo),
subset(mansNew, yearmo == newtest$yrmos[i])[,1:11], c(rep(NA,11)))
+ }
> newtest[10:15,]
yrmos yearmo snow.sum snow.mean snow.dep.mean prcp.sum prcp.mean tmin.min
10 195410 NA NA NA NA NA NA NA
11 195411 195411 195411 195411 195411 195411 195411 195411
12 195412 195412 195412 195412 195412 195412 195412 195412
13 195501 195501 195501 195501 195501 195501 195501 195501
14 195502 195502 195502 195502 195502 195502 195502 195502
15 195503 195503 195503 195503 195503 195503 195503 195503
tmin.mean tmax.max tmax.mean tmean.mean
10 NA NA NA NA
11 195411 195411 195411 195411
12 195412 195412 195412 195412
13 195501 195501 195501 195501
14 195502 195502 195502 195502
15 195503 195503 195503 195503
>
subset... should return only one row. This may be a simple comma problem, but
I think it has something to do with the lists. Also, if there is a way to do
this without the foreloop, I'd be happy to hear about it.
Any suggestions will be appreciated.
Thanks,
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