[R] how to un-crosstabulate data without changing numeric values to text?

Nevil Amos nevil.amos at gmail.com
Sat Aug 28 12:07:50 CEST 2010


I have a large amount of data read in from over 140 excel files in the 
format of x.  r1 to r5 are repeat measures for a given Wavelength and 
ANWC_NO.

I need to rearrange x into 3 columns, ANWC_NO,Wavelegth, value ie

ANWC_NO    Wavelength     r1
ANWC_NO    Wavelength,    r2
ANWC_NO    Wavelength     r3


etc...

I can rearrange the data using the code below, however all the columns 
end up as strings, not numeric values.  I cannot then summaries the 
data, ( whcih I need to do in bins of wavelanght for each ANWC_NO)


 > x
  Wavelength       r1       r2       r3       r4       r5 ANWC_NO
1        300 0.003126 0.005382 0.001094 0.012529 0.005632   39239
2        302 0.004924 0.006280 0.002366 0.015234 0.006204   39239
3        304 0.004769 0.005960 0.002759 0.015856 0.006804   39239
4        306 0.005181 0.006717 0.004033 0.017380 0.007675   39239
5        308 0.005872 0.008083 0.004429 0.018334 0.008504   39239
6        310 0.007164 0.010775 0.005949 0.019952 0.009594   39239
 > y =NULL
 > rows<-nrow(x)
 > for(r in 1:rows){
+ for(c in 2:6){
+ row<-c(c(x[r,7]),as.numeric(c(x[r,1])),as.numeric(c(x[r,c])))
+ y<-rbind(y,row)
+ }}
 > colnames(y)<-c("ANWC_NO","WAVELENGTH","VALUE")
 > head (y)
    ANWC_NO WAVELENGTH VALUE
row "39239" "300"      "0.003126"
row "39239" "300"      "0.005382"
row "39239" "300"      "0.001094"
row "39239" "300"      "0.012529"
row "39239" "300"      "0.005632"
row "39239" "302"      "0.004924"

 > mean(y$VALUE)
Error in y$VALUE : $ operator is invalid for atomic vectors

how do I get the data arranged in three columns but maintaining 
WavelENGTH and the values as numeric in a data.frame?
Many thanks

Nevil Amos
Monash University



More information about the R-help mailing list