Extracting portions of one vector to create others
On 9/1/2025 3:09 PM, Paul Zachos 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.
Hello,
Here is a way. This creates a matrix with the vectors you ask for.
But it doesn't create 5 different vectors, it keeps them in one object
only, a matrix.
CLASS <-
c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 4L, 4L, 4L, 4L, 4L, 4L,
4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 7L, 7L,
7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L,
7L, 7L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 1L)
Beth <- data.frame(CLASS)
eq <- c(1, 2, 4, 7, 9)
res <- sapply(eq, \(x) as.integer(x == Beth$CLASS))
colnames(res) <- paste0("CLASS", eq)
head(res)
#> CLASS1 CLASS2 CLASS4 CLASS7 CLASS9
#> [1,] 1 0 0 0 0
#> [2,] 1 0 0 0 0
#> [3,] 1 0 0 0 0
#> [4,] 1 0 0 0 0
#> [5,] 1 0 0 0 0
#> [6,] 1 0 0 0 0
If you really want 5 different objects in the global environment, you
can use ?list2env.
This is not a good practice, you will have related, loose objects in the
globalenv, making your code harder to debug. Keep it simple.
as.data.frame(res) |>
list2env(envir = .GlobalEnv)
#> <environment: R_GlobalEnv>
CLASS1
#> [1] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0
#> [39] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0
#> [77] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
CLASS2
#> [1] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1
#> [39] 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0
#> [77] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Hope this helps,
Rui Barradas