Dear R-Experts, I have a cosmic ray data that span several years. The data frame is of the form: 03 01 01 00 3809 03 01 01 01 3771 03 01 01 02 3743 03 01 01 03 3747 03 01 01 04 3737 03 01 01 05 3751 03 01 01 06 3733 03 01 01 07 3732. where the columns 1 to 5 stand for year, month, day, hour and counts. Some hours when the station does not have data are assigned zero, implying there could be several zeros in column 5. Since my aim is to plot the hourly mean for all the years, I started learning with one year - year 2003. I carefully went through the data, removing any day that contains zero for any of the hours. Instead of the 365 days in the year 2003, I ended up with 362 days. I saved that as CLMX1C (now stored in Ogbos2 with dput function, see attached please). If I run the data with my script, it gives me what I am expecting. My script is: d<-read.table("CLMX1C",col.names=c("h","count")) y<-d$count data<-(y-mean(y))/mean(y)*100 A<-matrix(rep(1:24,362)) B<-matrix(data) oodf<-data.frame(A,B) oodf<-data.frame(A,B) library(plotrix) std.error<-function(x) return(sd(x)/(sum(!is.na(x)))) oomean<-as.vector(by(oodf$B,oodf$A,mean)) oose<-as.vector(by(oodf$B,oodf$A,std.error)) plot(1:24,oomean,type="b",ylim=c(-0.4,0.5), xlab="Hours",ylab="CR count",main="CR daily variation for 2004") dispersion(1:24,oomean,oose,arrow.cap=.01) Now, instead of foraging through the big data removing the day for which there is a missing data for any hour, I wish to try to replace the missing data with NA and hoping that it will do the job for me. I added just three lines in the script above: d<-read.table("2003",col.names=c("y","m","d","h","count")) y<-d$count df<-data.frame(y)#line 1 library('dplyr') # line 2 y<-na_if(df, 0) #line 3 data<-(y-mean(y))/mean(y)*100. Then I started getting error messages: Error in is.data.frame(x) : (list) object cannot be coerced to type 'double' In addition: There were 26 warnings (use warnings() to see them). I hope you will assist me to deal with the issues of replacing zeros with NA in column 5 in such a way that my code will run. Iam ever indebted!! Best regards Ogbos
df[[ 5 ]][ 0 == df[[ 5 ]] ] <- NA On June 3, 2020 1:59:06 AM PDT, Ogbos Okike <giftedlife2014 at gmail.com> wrote:>Dear R-Experts, >I have a cosmic ray data that span several years. The data frame is of >the >form: >03 01 01 00 3809 >03 01 01 01 3771 >03 01 01 02 3743 >03 01 01 03 3747 >03 01 01 04 3737 >03 01 01 05 3751 >03 01 01 06 3733 >03 01 01 07 3732. >where the columns 1 to 5 stand for year, month, day, hour and counts. >Some hours when the station does not have data are assigned zero, >implying >there could be several zeros in column 5. Since my aim is to plot the >hourly mean for all the years, I started learning with one year - year >2003. > >I carefully went through the data, removing any day that contains zero >for >any of the hours. Instead of the 365 days in the year 2003, I ended up >with 362 days. > >I saved that as CLMX1C (now stored in Ogbos2 with dput function, see >attached please). > >If I run the data with my script, it gives me what I am expecting. My >script is: >d<-read.table("CLMX1C",col.names=c("h","count")) >y<-d$count >data<-(y-mean(y))/mean(y)*100 > >A<-matrix(rep(1:24,362)) >B<-matrix(data) > > oodf<-data.frame(A,B) > oodf<-data.frame(A,B) >library(plotrix) >std.error<-function(x) return(sd(x)/(sum(!is.na(x)))) >oomean<-as.vector(by(oodf$B,oodf$A,mean)) >oose<-as.vector(by(oodf$B,oodf$A,std.error)) >plot(1:24,oomean,type="b",ylim=c(-0.4,0.5), > xlab="Hours",ylab="CR count",main="CR daily variation for 2004") >dispersion(1:24,oomean,oose,arrow.cap=.01) > >Now, instead of foraging through the big data removing the day for >which >there is a missing data for any hour, I wish to try to replace the >missing >data with NA and hoping that it will do the job for me. > >I added just three lines in the script above: >d<-read.table("2003",col.names=c("y","m","d","h","count")) >y<-d$count >df<-data.frame(y)#line 1 >library('dplyr') # line 2 >y<-na_if(df, 0) #line 3 >data<-(y-mean(y))/mean(y)*100. >Then I started getting error messages: >Error in is.data.frame(x) : > (list) object cannot be coerced to type 'double' >In addition: There were 26 warnings (use warnings() to see them). > >I hope you will assist me to deal with the issues of replacing zeros >with >NA in column 5 in such a way that my code will run. > >Iam ever indebted!! >Best regards >Ogbos >______________________________________________ >R-help at 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.-- Sent from my phone. Please excuse my brevity.
Dear Jeff, Thank you so much for your time. I tried your code. It successfully assigned NA to the zeros. But the main code seems not to work with the NAs. The mean, for example, resulted in NA. I am attaching the data for a period of one year and the code which I use in plotting the data. Maybe it might be easier for you to spot where I run into error (my plot was just empty). Thanks again. Best regards Ogbos On Wed, Jun 3, 2020 at 8:47 PM Jeff Newmiller <jdnewmil at dcn.davis.ca.us> wrote:> df[[ 5 ]][ 0 == df[[ 5 ]] ] <- NA > > On June 3, 2020 1:59:06 AM PDT, Ogbos Okike <giftedlife2014 at gmail.com> > wrote: > >Dear R-Experts, > >I have a cosmic ray data that span several years. The data frame is of > >the > >form: > >03 01 01 00 3809 > >03 01 01 01 3771 > >03 01 01 02 3743 > >03 01 01 03 3747 > >03 01 01 04 3737 > >03 01 01 05 3751 > >03 01 01 06 3733 > >03 01 01 07 3732. > >where the columns 1 to 5 stand for year, month, day, hour and counts. > >Some hours when the station does not have data are assigned zero, > >implying > >there could be several zeros in column 5. Since my aim is to plot the > >hourly mean for all the years, I started learning with one year - year > >2003. > > > >I carefully went through the data, removing any day that contains zero > >for > >any of the hours. Instead of the 365 days in the year 2003, I ended up > >with 362 days. > > > >I saved that as CLMX1C (now stored in Ogbos2 with dput function, see > >attached please). > > > >If I run the data with my script, it gives me what I am expecting. My > >script is: > >d<-read.table("CLMX1C",col.names=c("h","count")) > >y<-d$count > >data<-(y-mean(y))/mean(y)*100 > > > >A<-matrix(rep(1:24,362)) > >B<-matrix(data) > > > > oodf<-data.frame(A,B) > > oodf<-data.frame(A,B) > >library(plotrix) > >std.error<-function(x) return(sd(x)/(sum(!is.na(x)))) > >oomean<-as.vector(by(oodf$B,oodf$A,mean)) > >oose<-as.vector(by(oodf$B,oodf$A,std.error)) > >plot(1:24,oomean,type="b",ylim=c(-0.4,0.5), > > xlab="Hours",ylab="CR count",main="CR daily variation for 2004") > >dispersion(1:24,oomean,oose,arrow.cap=.01) > > > >Now, instead of foraging through the big data removing the day for > >which > >there is a missing data for any hour, I wish to try to replace the > >missing > >data with NA and hoping that it will do the job for me. > > > >I added just three lines in the script above: > >d<-read.table("2003",col.names=c("y","m","d","h","count")) > >y<-d$count > >df<-data.frame(y)#line 1 > >library('dplyr') # line 2 > >y<-na_if(df, 0) #line 3 > >data<-(y-mean(y))/mean(y)*100. > >Then I started getting error messages: > >Error in is.data.frame(x) : > > (list) object cannot be coerced to type 'double' > >In addition: There were 26 warnings (use warnings() to see them). > > > >I hope you will assist me to deal with the issues of replacing zeros > >with > >NA in column 5 in such a way that my code will run. > > > >Iam ever indebted!! > >Best regards > >Ogbos > >______________________________________________ > >R-help at 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. > > -- > Sent from my phone. Please excuse my brevity. >