[R] data.frame transformation

David Winsemius dwinsemius at comcast.net
Mon Mar 14 20:11:59 CET 2011


On Mar 14, 2011, at 2:52 PM, andrija djurovic wrote:

> Hi R users,
>
> I have following data frame
>
> df<-data.frame(q1=c(0,0,33.33,"check"),q2=c(0,33.33,"check",9.156),
> q3=c("check","check",25,100),q4=c(7.123,35,100,"check"))
>
> and i would like to replace every element that is less then 10  
> with . (dot)
> in order to obtain this:
>
>     q1    q2    q3    q4
> 1     .     . check     .
> 2     . 33.33 check    35
> 3 33.33 check    25   100
> 4 check     .   100 check
>
> I had a lot of difficulties because each variable is factor.

Right, so comparisons with "<" will throw an error.  I would sidestep  
the factor problem with stringsAsFactors=FALSE in the data.frame call.  
You might want to reconsider the "." as a missing value. If you are  
coming from a SAS background, you should try to get comfortable with  
NA or NA_character as a value.

df<-data.frame(q1=c(0,0,33.33,"check"),q2=c(0,33.33,"check",9.156),
  q3=c("check","check",25,100),q4=c(7.123,35,100,"check"),  
stringsAsFactors=FALSE)

is.na(df) <- t(apply(df, 1, function(x)  as.numeric(x) < 10))

Warning messages:
1: In FUN(newX[, i], ...) : NAs introduced by coercion
2: In FUN(newX[, i], ...) : NAs introduced by coercion
3: In FUN(newX[, i], ...) : NAs introduced by coercion
4: In FUN(newX[, i], ...) : NAs introduced by coercion
 > df
      q1    q2    q3    q4
1  <NA>  <NA> check  <NA>
2  <NA> 33.33 check    35
3 33.33 check    25   100
4 check  <NA>   100 check


> Could someone help me with this?
>
> Thanks in advance for any help.
>
> Andrija
>
> 	[[alternative HTML version deleted]]
>
> ______________________________________________
> R-help at r-project.org mailing list
> 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.

David Winsemius, MD
West Hartford, CT



More information about the R-help mailing list