[R] coercing created variables into a new data frame using na.omit()

Kjetil Brinchmann Halvorsen kjetil at acelerate.com
Fri Aug 12 19:05:07 CEST 2005


Prof Brian Ripley wrote:

>I don't know if you can read your message, but I find it exceedingly 
>difficult and there seem to be several typos.  Please use the space and 
>return keys ... and only send a message once.
>
>You problem is perhaps that you are not looking at the data frame, but at 
>the variable in the workspace.  attach()ing data frames is convenient but 
>error-prone (as you have found).  rm(new.variable) should solve this, but 
>it is better to cultivate a different style.  For example
>
>with(data.frame1, {
># commands to create value
>data.frame1$new.variable <- value
>})
>data.frame3 <- na.omit(data.frame1)
>
>  
>
That cannot possible work, as assignment within with is local to
with's environment. I have used superassigmnent for this (<<-), but that 
cannot possible
be a good style?

Look at the following:

 > test <- data.frame( a=1:5, b=1:5)
 > test
  a b
1 1 1
2 2 2
3 3 3
4 4 4
5 5 5
 > with(test, test$c <- 1:5)
 > test
  a b
1 1 1
2 2 2
3 3 3
4 4 4
5 5 5
 > with(test, test$c <<- 1:5)
 > test
  a b c
1 1 1 1
2 2 2 2
3 3 3 3
4 4 4 4
5 5 5 5

So what is the best style her?

Kjetil

>I think too that the creation of the value can be vectorized simply, 
>generalizing something like
>
>value <- (age1 - 7)*(weight - mw)
>
>
>On Fri, 12 Aug 2005, sp219 wrote:
>
>  
>
>>Hi,
>>I am an R newbie and one thing I am having trouble with binding variables that
>>I have created within one data frame into a new data frame when using
>>na.omit(). To illustrate this problem I will give the example I am working on
>>and the approah I have been using:-
>>data.frame1<-filepath....
>>attach(data.frame1)
>>#create a new variable using a function
>>new.variable<-rep(1,length(weight3))
>>for (x in 1:length(new.variable))
>>{f<-((((age1[x]-7)*(weight[x]-mw))+((age2[x]-7)*(weight2[x]-mw))+((age3[x]-7)*
>>(weight3[x]-mw)))/(((age1[x]-7)^2)+((age2[x]-7)^2)+((age3[x]-7)^2)));
>>new.variable[x]<-f}
>>#then bind it into the existing old data frame
>>data.frame2<-cbind(data.frame1,newvariable)
>>rm(dat.frame1)
>>attach(data.frame2)
>>#everything o.k. so far but now the problem part... I basically want to remove
>>all the rows with NA in the new data frame including corresponding rows in the
>>new variable
>>data.frame3<-na.omit(data.frame2)
>>rm(data.frame2)
>>attach(data.frame3)
>>length of new.variable has not changed but the length of all the other
>>variables in data.frame2 has?
>>Could someone please provide an explanation or an alternative route if
>>possible?
>>Any suggestions much appreciated,
>>Thankyou, Simon Pickett
>>
>>Simon Pickett
>>Centre for Ecology and Conservation Biology
>>University of Exeter in Cornwall
>>Tremough Campus
>>Penryn
>>Cornwall
>>TR10 9EZ UK
>>Tel: 01326371852
>>
>>______________________________________________
>>R-help at stat.math.ethz.ch mailing list
>>https://stat.ethz.ch/mailman/listinfo/r-help
>>PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html
>>
>>    
>>
>
>  
>


-- 

Kjetil Halvorsen.

Peace is the most effective weapon of mass construction.
               --  Mahdi Elmandjra





-- 
Internal Virus Database is out-of-date.
Checked by AVG Anti-Virus.




More information about the R-help mailing list