[R] categorizing data

Rui Barradas ru|pb@rr@d@@ @end|ng |rom @@po@pt
Sun May 29 21:58:29 CEST 2022


Hello,

Here is a way. Define a function to change the values and call it in a 
apply loop. But Tom's suggestions are more reasonable, you should have a 
good reason why to change the data.


x <- '
tree  shrub  grass
32     11       47
23      41      26
49      23      18'
orig <- read.table(textConnection(x), header = TRUE)

f <- function(x) {
   stopifnot(length(x) == 3L)
   i_min <- which.min(x)
   i_max <- which.max(x)
   s <- (x[i_min] - 10) + (x[i_max] - 50)
   x[i_min] <- 10
   x[i_max] <- 50
   x[-c(i_min, i_max)] <- x[-c(i_min, i_max)] + s
   x
}

t(apply(orig, 1, f))
#       tree shrub grass
#  [1,]   30    10    50
#  [2,]   10    50    30
#  [3,]   50    30    10


Hope this helps,

Rui Barradas

Às 20:28 de 29/05/2022, Janet Choate escreveu:
> Hi R community,
> I have a data frame with three variables, where each row adds up to 90.
> I want to assign a category of low, medium, or high to the values in each
> row - where the lowest value per row will be set to 10, the medium value
> set to 30, and the high value set to 50 - so each row still adds up to 90.
> 
> For example:
> Data: Orig
> tree  shrub  grass
> 32     11       47
> 23      41      26
> 49      23      18
> 
> Data: New
> tree  shrub  grass
> 30      10      50
> 10       50     30
> 50       30     10
> 
> I am not attaching any code here as I have not been able to write anything
> effective! appreciate help with this!
> thank you,
> JC
> 
> --
> 
> 	[[alternative HTML version deleted]]
> 
> ______________________________________________
> R-help using 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.



More information about the R-help mailing list