The solutions offered are fine but perhaps not quite directly what was asked 
for.

A careful reading seems to suggest they simply want a way to index the 
data.frame multiple ways by creating a set of vectors containing zero or one. 
He seems to want a solution for a specific case. This seems like it can be 
solved fairly easily with ifelse() as in:

CLASS1 <- ifelse(Beth$CLASS==1, 1, 0)
CLASS2 <- ifelse(Beth$CLASS==2, 1, 0)
CLASS4 <- ifelse(Beth$CLASS==4, 1, 0)
CLASS7 <- ifelse(Beth$CLASS==7, 1, 0)
CLASS9 <- ifelse(Beth$CLASS==9, 1, 0)

Of course a more general solution could consider arbitrary factors and create 
either custom names for resulting vectors or create a list of such vectors or 
other data structures like the matrix one being provided.

And, of course, sometimes you do not choose this way of having a "Boolean 
vector" to be used as an index but can use standard R (or packages like dplyr) 
to select the rows needed with a query.

-----Original Message-----
From: R-help <r-help-boun...@r-project.org> On Behalf Of Jeff Newmiller via 
R-help
Sent: Tuesday, September 2, 2025 4:16 AM
To: r-help@r-project.org
Subject: Re: [R] Extracting portions of one vector to create others

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 <p...@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  |  
>p...@acase.org  |  www.acase.org
>
>
>
>
>
>       [[alternative HTML version deleted]]
>
>______________________________________________
>R-help@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.

______________________________________________
R-help@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.

______________________________________________
R-help@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.

Reply via email to