Extracting portions of one vector to create others
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-bounces at r-project.org> On Behalf Of Jeff Newmiller via R-help
Sent: Tuesday, September 2, 2025 4:16 AM
To: r-help at 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 <paz at 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 at acase.org | www.acase.org [[alternative HTML version deleted]] ______________________________________________ R-help at 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 at 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.