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.
Could someone help me with this?
Thanks in advance for any help.
Andrija
[[alternative HTML version deleted]]
Dear Andrija, You could convert the factors to numeric class in order to test, get an index of cells and then replace those. I wonder though if it wouldn't be easier to do this at some step *before* the numbers are combined with strings? At any rate, take a look at ?which ?factor ?as.numeric ?lapply for some functions to do my first suggestion On Mar 14, 2011, at 11:52, andrija djurovic <djandrija at gmail.com> 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. > 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.
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