[R] if between 500-600 give 550

David Winsemius dwinsemius at comcast.net
Fri Nov 9 16:27:51 CET 2012


On Nov 9, 2012, at 5:10 AM, Tagmarie wrote:

> I have a data frame somewhat like this: 
> 
> myframe <- data.frame (ID=c(2,3,4,5), Hunger =c(415,452,550,318 ))
> myframe
> 
> Now I would like to add a column to the right which summarizes the values
> for Hunger somewhat to reduce the number of values: If the values for Hunger
> are between 
> 300-400 I would like to insert the number 350, 
> between 
> 400-500 insert 450
> between 
> 500-600 insert 550 
> 
> Does anyone know how? Cause I don't and my brain already hurts. Can't be
> that difficult, right?

> myframe$grpH <- c(350, 450, 550)[ 
                      findInterval(myframe$Hunger, c(300, 400, 500, 600) ) ]
> myframe
  ID Hunger grpH
1  2    415  450
2  3    452  450
3  4    550  550
4  5    318  350

Please note that your specification had overlapping intervals and that 'findInterval' by default uses closed intervals on the left and open intervals on the right. (This is the opposite of the default behavior of cut(). ) So I suppose you could say R's implementations are just as ambiguous as your problem specification.

> myframe$grpHc <- cut(myframe$Hunger, breaks=c(300, 400, 500, 600), labels=c("350", "450", "550") )
> myframe
  ID Hunger grpH grpHc
1  2    415  450   450
2  3    452  450   450
3  4    550  550   550
4  5    318  350   350

Note also that cut returns a factor:

>  lapply(myframe, class)
$ID
[1] "numeric"

$Hunger
[1] "numeric"

$grpH
[1] "numeric"

$grpHc
[1] "factor"
-- 

David Winsemius, MD
Alameda, CA, USA




More information about the R-help mailing list