[R] Extracting portions of one vector to create others

Jeff Newmiller jdnewm|| @end|ng |rom dcn@d@v|@@c@@u@
Tue Sep 2 10:16:19 CEST 2025


This is an extremely common transformation in regression, and it has a dedicated function (model.matrix) for accomplishing it in R. It does presume you have a bit of familiarity with the formula literal type in R... which is created using the tilde character (e.g. ~ CLASS). Also, since including an intercept term in a regression is the default, if you only want the columns you described then you need to inform the function that you want to leave the intercept out (~ CLASS - 1). It doesn't apply this discrete transformation unless the referenced variable is a factor variable, so I convert it from integer type in the short example below.

Beth <- data.frame(

  CLASS = c(
    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2
    , 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 4, 4, 4, 4, 4, 4, 4
    , 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7
    , 7, 7, 7, 7, 7, 7, 7, 7, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 1))
Beth$CLASS <- as.character(Beth$CLASS)
result <- model.matrix( ~ CLASS - 1, Beth)
result

Note that the result is a matrix, not a data frame so you will have to use brackets and a blank for the row spec if you want to access one column at a time: 

result[, "CLASS1"]

Refer to the help page for more on this function:
?model.matrix



On September 1, 2025 7:09:56 AM PDT, Paul Zachos <paz using acase.org> wrote:
>Dear Colleagues,
>
>I have a vector which indicates membership of subjects in one of 5 Classes
>
>Beth$CLASS
> [1] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
>[37] 2 2 2 2 2 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 7 7 7 7 7 7 7 7 7 7 7
>[73] 7 7 7 7 7 7 7 7 7 9 9 9 9 9 9 9 9 9 9 9 9 9 9 1
>
>For purposes of an analysis (using linear models based on Ward and Jennings) I would like to create 5 new vectors
>
>The values in vector CLASS1 will be ‘1’ if the corresponding value in Beth$CLASS is equal to ‘1’; ‘0’ otherwise
>
>The values in vector CLASS2 will be ‘1’ if the corresponding value in Beth$CLASS is equal to ‘2’; ‘0’ otherwise
>
>The values in vector CLASS4 will be ‘1’ if the corresponding value in Beth$CLASS is equal to ‘4’; ‘0’ otherwise
>
>The values in vector CLASS7 will be ‘1’ if the corresponding value in Beth$CLASS is equal to ‘7’; ‘0’ otherwise
>
>The values in vector CLASS9 will be ‘1’ if the corresponding value in Beth$CLASS is equal to ‘9’; ‘0’ otherwise
>
>How would I go about this using R
>
>Thank you
>_________________
>Paul Zachos, PhD
>Director, Research and Evaluation
>Association for the Cooperative Advancement of Science and Education (ACASE)
>110 Spring Street  Saratoga Springs, NY 12866  |  
>paz using acase.org  |  www.acase.org
>
>
>
>
>
>	[[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 https://www.R-project.org/posting-guide.html
>and provide commented, minimal, self-contained, reproducible code.

-- 
Sent from my phone. Please excuse my brevity.



More information about the R-help mailing list