0

I am trying to loop the following code. I need these exact variable names and conditions. I am trying to create 83 "self" variables and 83 "home" variables. I would like to learn how to loop this instead of Ctrl+F and replace all A(i)_ with the new A(i+1)_ in the series, then copy and paste. I have posted the first 3 series, but I have 83 create with some numbers in the sequence being skipped over. The hardest part (for me) is skipping over "A13_" "A15_", "A18_", "A36_", "A42_" "A43_", "A61_", "A65_", and "A72_" inside the loop. Any help is greatly appreciated!

HYM <- mutate(HYM,A1_self = case_when( (HYM$A1_1 == 1 & is.na(HYM$A1_2) == TRUE & is.na(HYM$A1_3) == TRUE & is.na(HYM$A1_4) == TRUE) | (HYM$A1_1 == 1 & HYM$A1_2 == 1 & is.na(HYM$A1_3) == TRUE & is.na(HYM$A1_4) == TRUE) | (HYM$A1_1 == 1 & HYM$A1_3 == 1 & is.na(HYM$A1_2) == TRUE & is.na(HYM$A1_4) == TRUE) | (HYM$A1_1 == 1 & HYM$A1_4 == 1 & is.na(HYM$A1_2) == TRUE & is.na(HYM$A1_3) == TRUE) ~ 1, (HYM$A1_3 == 1 & is.na(HYM$A1_1) == TRUE & is.na(HYM$A1_2) == TRUE & is.na(HYM$A1_4) == TRUE) | (HYM$A1_3 == 1 & HYM$A1_4 == 1 & is.na(HYM$A1_1) == TRUE & is.na(HYM$A1_2) == TRUE) | (HYM$A1_2 == 1 & HYM$A1_3 == 1 & is.na(HYM$A1_1) == TRUE & is.na(HYM$A1_4) == TRUE) | (HYM$A1_2 == 1 & is.na(HYM$A1_1) == TRUE & is.na(HYM$A1_3) == TRUE & is.na(HYM$A1_4) == TRUE) ~ 0, (HYM$A1_4 == 1 & is.na(HYM$A1_1) == TRUE & is.na(HYM$A1_2) == TRUE & is.na(HYM$A1_3) == TRUE) | (HYM$A1_2 == 1 & HYM$A1_4 == 1 & is.na(HYM$A1_1) == TRUE & is.na(HYM$A1_3) == TRUE) ~ -77, (is.na(HYM$A1_1) == TRUE & is.na(HYM$A1_2) == TRUE & is.na(HYM$A1_3) == TRUE & is.na(HYM$A1_4) == TRUE) ~ -99 ))

HYM <- mutate(HYM, A1_home = case_when( (HYM$A1_2 == 1 & is.na(HYM$A1_1) == TRUE & is.na(HYM$A1_3) == TRUE & is.na(HYM$A1_4) == TRUE) | (HYM$A1_1 == 1 & HYM$A1_2 == 1 & is.na(HYM$A1_3) == TRUE & is.na(HYM$A1_4) == TRUE) | (HYM$A1_2 == 1 & HYM$A1_3 == 1 & is.na(HYM$A1_1) == TRUE & is.na(HYM$A1_4) == TRUE) | (HYM$A1_2 == 1 & HYM$A1_4 == 1 & is.na(HYM$A1_1) == TRUE & is.na(HYM$A1_3) == TRUE) ~ 1, (HYM$A1_3 == 1 & is.na(HYM$A1_1) == TRUE & is.na(HYM$A1_2) == TRUE & is.na(HYM$A1_4) == TRUE) | (HYM$A1_1 == 1 & HYM$A1_3 == 1 & is.na(HYM$A1_2) == TRUE & is.na(HYM$A1_4) == TRUE) ~ 0, (HYM$A1_4 == 1 & is.na(HYM$A1_1) == TRUE & is.na(HYM$A1_2) == TRUE & is.na(HYM$A1_3) == TRUE) | (HYM$A1_3 == 1 & HYM$A1_4 == 1 & is.na(HYM$A1_1) == TRUE & is.na(HYM$A1_2) == TRUE) | (HYM$A1_1 == 1 & HYM$A1_4 == 1 & is.na(HYM$A1_2) == TRUE & is.na(HYM$A1_3) == TRUE) ~ -77, (is.na(HYM$A1_1) == TRUE & is.na(HYM$A1_2) == TRUE & is.na(HYM$A1_3) == TRUE & is.na(HYM$A1_4) == TRUE) | (HYM$A1_1 == 1 & is.na(HYM$A1_2) == TRUE & is.na(HYM$A1_3) == TRUE & is.na(HYM$A1_4) == TRUE) ~ -99 ))

HYM <- mutate(HYM,A2_self = case_when( (HYM$A2_1 == 1 & is.na(HYM$A2_2) == TRUE & is.na(HYM$A2_3) == TRUE & is.na(HYM$A2_4) == TRUE) | (HYM$A2_1 == 1 & HYM$A2_2 == 1 & is.na(HYM$A2_3) == TRUE & is.na(HYM$A2_4) == TRUE) | (HYM$A2_1 == 1 & HYM$A2_3 == 1 & is.na(HYM$A2_2) == TRUE & is.na(HYM$A2_4) == TRUE) | (HYM$A2_1 == 1 & HYM$A2_4 == 1 & is.na(HYM$A2_2) == TRUE & is.na(HYM$A2_3) == TRUE) ~ 1, (HYM$A2_3 == 1 & is.na(HYM$A2_1) == TRUE & is.na(HYM$A2_2) == TRUE & is.na(HYM$A2_4) == TRUE) | (HYM$A2_3 == 1 & HYM$A2_4 == 1 & is.na(HYM$A2_1) == TRUE & is.na(HYM$A2_2) == TRUE) | (HYM$A2_2 == 1 & HYM$A2_3 == 1 & is.na(HYM$A2_1) == TRUE & is.na(HYM$A2_4) == TRUE) | (HYM$A2_2 == 1 & is.na(HYM$A2_1) == TRUE & is.na(HYM$A2_3) == TRUE & is.na(HYM$A2_4) == TRUE) ~ 0, (HYM$A2_4 == 1 & is.na(HYM$A2_1) == TRUE & is.na(HYM$A2_2) == TRUE & is.na(HYM$A2_3) == TRUE) | (HYM$A2_2 == 1 & HYM$A2_4 == 1 & is.na(HYM$A2_1) == TRUE & is.na(HYM$A2_3) == TRUE) ~ -77, (is.na(HYM$A2_1) == TRUE & is.na(HYM$A2_2) == TRUE & is.na(HYM$A2_3) == TRUE & is.na(HYM$A2_4) == TRUE) ~ -99 ))

HYM <- mutate(HYM, A2_home = case_when( (HYM$A2_2 == 1 & is.na(HYM$A2_1) == TRUE & is.na(HYM$A2_3) == TRUE & is.na(HYM$A2_4) == TRUE) | (HYM$A2_1 == 1 & HYM$A2_2 == 1 & is.na(HYM$A2_3) == TRUE & is.na(HYM$A2_4) == TRUE) | (HYM$A2_2 == 1 & HYM$A2_3 == 1 & is.na(HYM$A2_1) == TRUE & is.na(HYM$A2_4) == TRUE) | (HYM$A2_2 == 1 & HYM$A2_4 == 1 & is.na(HYM$A2_1) == TRUE & is.na(HYM$A2_3) == TRUE) ~ 1, (HYM$A2_3 == 1 & is.na(HYM$A2_1) == TRUE & is.na(HYM$A2_2) == TRUE & is.na(HYM$A2_4) == TRUE) | (HYM$A2_1 == 1 & HYM$A2_3 == 1 & is.na(HYM$A2_2) == TRUE & is.na(HYM$A2_4) == TRUE) ~ 0, (HYM$A2_4 == 1 & is.na(HYM$A2_1) == TRUE & is.na(HYM$A2_2) == TRUE & is.na(HYM$A2_3) == TRUE) | (HYM$A2_3 == 1 & HYM$A2_4 == 1 & is.na(HYM$A2_1) == TRUE & is.na(HYM$A2_2) == TRUE) | (HYM$A2_1 == 1 & HYM$A2_4 == 1 & is.na(HYM$A2_2) == TRUE & is.na(HYM$A2_3) == TRUE) ~ -77, (is.na(HYM$A2_1) == TRUE & is.na(HYM$A2_2) == TRUE & is.na(HYM$A2_3) == TRUE & is.na(HYM$A2_4) == TRUE) | (HYM$A2_1 == 1 & is.na(HYM$A2_2) == TRUE & is.na(HYM$A2_3) == TRUE & is.na(HYM$A2_4) == TRUE) ~ -99 ))

HYM <- mutate(HYM,A3_self = case_when( (HYM$A3_1 == 1 & is.na(HYM$A3_2) == TRUE & is.na(HYM$A3_3) == TRUE & is.na(HYM$A3_4) == TRUE) | (HYM$A3_1 == 1 & HYM$A3_2 == 1 & is.na(HYM$A3_3) == TRUE & is.na(HYM$A3_4) == TRUE) | (HYM$A3_1 == 1 & HYM$A3_3 == 1 & is.na(HYM$A3_2) == TRUE & is.na(HYM$A3_4) == TRUE) | (HYM$A3_1 == 1 & HYM$A3_4 == 1 & is.na(HYM$A3_2) == TRUE & is.na(HYM$A3_3) == TRUE) ~ 1, (HYM$A3_3 == 1 & is.na(HYM$A3_1) == TRUE & is.na(HYM$A3_2) == TRUE & is.na(HYM$A3_4) == TRUE) | (HYM$A3_3 == 1 & HYM$A3_4 == 1 & is.na(HYM$A3_1) == TRUE & is.na(HYM$A3_2) == TRUE) | (HYM$A3_2 == 1 & HYM$A3_3 == 1 & is.na(HYM$A3_1) == TRUE & is.na(HYM$A3_4) == TRUE) | (HYM$A3_2 == 1 & is.na(HYM$A3_1) == TRUE & is.na(HYM$A3_3) == TRUE & is.na(HYM$A3_4) == TRUE) ~ 0, (HYM$A3_4 == 1 & is.na(HYM$A3_1) == TRUE & is.na(HYM$A3_2) == TRUE & is.na(HYM$A3_3) == TRUE) | (HYM$A3_2 == 1 & HYM$A3_4 == 1 & is.na(HYM$A3_1) == TRUE & is.na(HYM$A3_3) == TRUE) ~ -77, (is.na(HYM$A3_1) == TRUE & is.na(HYM$A3_2) == TRUE & is.na(HYM$A3_3) == TRUE & is.na(HYM$A3_4) == TRUE) ~ -99 ))

HYM <- mutate(HYM, A3_home = case_when( (HYM$A3_2 == 1 & is.na(HYM$A3_1) == TRUE & is.na(HYM$A3_3) == TRUE & is.na(HYM$A3_4) == TRUE) | (HYM$A3_1 == 1 & HYM$A3_2 == 1 & is.na(HYM$A3_3) == TRUE & is.na(HYM$A3_4) == TRUE) | (HYM$A3_2 == 1 & HYM$A3_3 == 1 & is.na(HYM$A3_1) == TRUE & is.na(HYM$A3_4) == TRUE) | (HYM$A3_2 == 1 & HYM$A3_4 == 1 & is.na(HYM$A3_1) == TRUE & is.na(HYM$A3_3) == TRUE) ~ 1, (HYM$A3_3 == 1 & is.na(HYM$A3_1) == TRUE & is.na(HYM$A3_2) == TRUE & is.na(HYM$A3_4) == TRUE) | (HYM$A3_1 == 1 & HYM$A3_3 == 1 & is.na(HYM$A3_2) == TRUE & is.na(HYM$A3_4) == TRUE) ~ 0, (HYM$A3_4 == 1 & is.na(HYM$A3_1) == TRUE & is.na(HYM$A3_2) == TRUE & is.na(HYM$A3_3) == TRUE) | (HYM$A3_3 == 1 & HYM$A3_4 == 1 & is.na(HYM$A3_1) == TRUE & is.na(HYM$A3_2) == TRUE) | (HYM$A3_1 == 1 & HYM$A3_4 == 1 & is.na(HYM$A3_2) == TRUE & is.na(HYM$A3_3) == TRUE) ~ -77, (is.na(HYM$A3_1) == TRUE & is.na(HYM$A3_2) == TRUE & is.na(HYM$A3_3) == TRUE & is.na(HYM$A3_4) == TRUE) | (HYM$A3_1 == 1 & is.na(HYM$A3_2) == TRUE & is.na(HYM$A3_3) == TRUE & is.na(HYM$A3_4) == TRUE) ~ -99 ))
 ID       A1_1       A1_2     A1_3   A1_4     A2_1      A2_2    A2_3  A2_4  A3_1  A3_2
   <chr>  <dbl+>  <dbl+lbl> <dbl+lb> <dbl+> <dbl+lb> <dbl+lbl> <dbl+l> <dbl> <dbl> <dbl>
 1 1234.     NA NA           1 [No]     NA NA       NA         1 [No]    NA    NA    NA
 2 2345.     NA  1 [Yes (…  NA          NA NA       NA         1 [No]    NA    NA    NA
 3 3456.     NA  1 [Yes (…  NA          NA NA        1 [Yes … NA         NA    NA    NA
 5 4567.     NA NA           1 [No]     NA  1 [Yes… NA        NA         NA    NA    NA
 6 5678.     NA NA           1 [No]     NA NA       NA         1 [No]    NA    NA    NA
 7 9876.     NA NA           1 [No]     NA NA       NA         1 [No]    NA    NA    NA
 8 6789.     NA NA           1 [No]     NA NA       NA         1 [No]    NA    NA    NA
 9 8765.     NA NA          NA          NA NA       NA        NA         NA    NA    NA
10 1234.     NA NA 
11 1234. NA       NA       NA      NA       NA       NA       NA      NA       NA      
12 1234. NA       NA       NA      NA       NA       NA       NA      NA       NA      
13 1234.  1 [Yes…  1 [Yes… NA      NA        1 [Yes…  1 [Yes… NA      NA        1 [Yes…
14 1234. NA       NA       NA      NA       NA       NA       NA      NA       NA      
15 1234. NA       NA       NA       1 [Doe… NA       NA       NA       1 [Doe… NA      
16 1234. NA        1 [Yes… NA      NA       NA       NA        1 [No] NA       NA      
17 1234. NA       NA        1 [No] NA        1 [Yes… NA       NA      NA       NA      
18 1234. 1 [Yes… NA       NA      NA       NA       NA       NA       1 [Doe… NA      
19 1234.  1 [Yes… NA       NA      NA       NA       NA        1 [No] NA        1 [Yes…
20 1234.  1 [Yes… NA       NA      NA        1 [Yes… NA       NA      NA       NA      

1 Answers1

0

The functions pivot_longer(), pivot_wider(), and group_by() will allow you to avoid the copy-find-paste routine.

As an aside, when creating a reproducible example, it is helpful to show how you created the data example. I couldn't quite follow your data example, so I've created a similar data set:

library(dplyr)
library(tidyr)

# create example data
set.seed(1)
HYM <- matrix(data = rbinom(20*10, 1, .1),
              nrow = 20,
              ncol = 10) %>%
  as.data.frame()
HYM[HYM == 0] <- NA
names(HYM) <- c(paste0("A1_", 1:4),
                paste0("A2_", 1:4),
                paste0("A3_", 1:2))
HYM$ID <- c(1234, 2345, 3456, 4567, 5678, 
            9876, 6789, 8765, rep(1234, 12))
HYM <- HYM %>% select(ID, everything())
# view first 6 rows of example data
head(HYM)
    ID A1_1 A1_2 A1_3 A1_4 A2_1 A2_2 A2_3 A2_4 A3_1 A3_2
1 1234   NA   NA   NA   NA   NA   NA   NA    1   NA   NA
2 2345   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA
3 3456   NA   NA    1   NA   NA   NA   NA   NA   NA   NA
4 4567   NA   NA   NA   NA   NA   NA    1   NA   NA    1
5 5678   NA    1   NA   NA   NA   NA   NA   NA   NA   NA
6 9876   NA   NA   NA   NA   NA    1    1   NA   NA   NA

From your code, it seems that you want to consider each row in your original data individually (regardless of the ID column) and produce a grouped summary based on the first part of each variable name (e.g., the "A2" part of "A2_1").

To do this, we can add a row identifier and also reshape the data into a longer format. With this reshaping step, we can divide the name of each variable ("A2_1") into two parts ("A2" and "1"). This will allow us to group by that "A2" part of the variable name and avoid the copy-find-paste:

HYM_long <- HYM %>%
  # add a row identifier
  mutate(row_id = row_number()) %>%
  # swing all your 'A*_*' variables into a column with their values in another column
  pivot_longer(cols = c(-ID, -row_id),
               names_to = "name",
               values_to = "condition") %>%
  # pull apart the, e.g., "A2" and "1" of "A2_1"
  separate(name, c("name1", "name2"), sep = "_") %>%
  # make names friendly to pull back out into a wider format 
  mutate(name2 = paste0("name2_", name2)) %>%    # e.g. "1" becomes "name2_1"
  pivot_wider(names_from = name2, 
              values_from = condition,
              values_fill = 0)

Note that, if we take a peek at the data, in that last step we filled variables that don't exist with 0; for example, there is no "A3_3" in the example data, so when name1 is "A3" we have name2_3 as 0:

# peek at the data
head(HYM_long)

     ID row_id name1 name2_1 name2_2 name2_3 name2_4
  <dbl>  <int> <chr>   <int>   <int>   <int>   <int>
1  1234      1 A1         NA       1      NA       1
2  1234      1 A2         NA      NA       1      NA
3  1234      1 A3         NA      NA       0       0
4  2345      2 A1         NA      NA      NA      NA
5  2345      2 A2         NA      NA      NA      NA
6  2345      2 A3         NA      NA       0       0

Next, identify the variables that you want to skip over and not assign a value for the self and home variables. For this example, I'll assume "A3_" is one of those variables, but I've included commented out code for the exact variables you mentioned:

# identify the variables you want to skip over
# pass_vars <- paste0("A", c(13, 15, 18, 36, 42, 43,61, 65, 72))
pass_vars <- "A3"

Now to summarize the self and home variables (no copy-find-paste):

# create self and home variables
HYM_long_subset <- HYM_long %>%
  filter(!name1 %in% pass_vars) %>%
  group_by(row_id, ID, name1) %>%
  summarize(self = case_when(
    name2_1 == 1 & sum(is.na(name2_2), is.na(name2_3), is.na(name2_4)) > 1 ~ 1,
    name2_3 == 1 & sum(is.na(name2_1), is.na(name2_2), is.na(name2_4)) > 1 ~ 0,
    name2_2 == 1 & is.na(name2_1) & is.na(name2_3) & is.na(name2_4) ~ 0,
    name2_4 == 1 & sum(is.na(name2_1), is.na(name2_2), is.na(name2_3)) > 1 ~ -77,
    is.na(name2_1) & is.na(name2_2) & is.na(name2_3) & is.na(name2_4) ~ -99),
    home = case_when(
      name2_2 == 1 & sum(is.na(name2_1), is.na(name2_3), is.na(name2_4)) > 1 ~ 1,
      name2_4 == 1 & sum(is.na(name2_2), is.na(name2_3), is.na(name2_1)) > 1 ~ -77,
      name2_3 == 1 & sum(is.na(name2_2), is.na(name2_1), is.na(name2_4)) > 1 ~ 0,
      name2_1 == 1 & sum(is.na(name2_2), is.na(name2_3), is.na(name2_4)) > 1 ~ -99,
      is.na(name2_1) & is.na(name2_2) & is.na(name2_3) & is.na(name2_4) ~ -99))

The data is there, but if you want to swing it back out into a wide-format:

# swing wide & remove the row identifier
HYM_long_subset %>%
  pivot_longer(cols = c(self, home),
               names_to = "summary_type") %>%
  mutate(name_var = paste(name1, summary_type, sep = "_")) %>%
  select(row_id, ID, name_var, value) %>%
  pivot_wider(names_from = name_var,
              values_from = value) %>% 
  ungroup() %>%
  select(-row_id)

# A tibble: 20 x 5
      ID A1_self A1_home A2_self A2_home
   <dbl>   <dbl>   <dbl>   <dbl>   <dbl>
 1  1234     -77       1       0       0
 2  2345     -99     -99     -99     -99
 3  3456     -99     -99     -99     -99
 4  4567       1     -99       0       1
 5  5678     -99     -99     -99     -99
 6  9876     -99     -99     -99     -99
 7  6789       1     -99     -99     -99
 8  8765     -99     -99     -99     -99
 9  1234     -99     -99       0       1
10  1234     -99     -99     -99     -99
11  1234     -99     -99       0       1
12  1234     -99     -99     -99     -99
13  1234     -99     -99     -99     -99
14  1234     -99     -99     -99     -99
15  1234     -99     -99       0       0
16  1234     -99     -99     -99     -99
17  1234     -99     -99     -99     -99
18  1234       1     -99     -99     -99
19  1234     -99     -99       0       0
20  1234     -77     -77     -99     -99

Example with a for-loop

Keeping with the data structure you mentioned in the original question ("A92_4", etc.), here is an example that uses a for-loop (as requested in the comments).

# creating a new data example
set.seed(1)
n_name1 <- 92  # e.g., "A1_" ... "A92_"
n_name2 <- 4   # e.g., "A1_1" ... "A1_4"
HYM <- matrix(data = rbinom(20*(n_name1*n_name2), 1, .1),
              nrow = 20,
              ncol = (n_name1*n_name2)) %>%
  as.data.frame()
HYM[HYM == 0] <- NA
names(HYM) <- paste0("A", 1:n_name1) %>%
  rep(., each = n_name2) %>%
  paste0(., "_", 1:n_name2)
HYM$ID <- c(1234, 2345, 3456, 4567, 5678, 
            9876, 6789, 8765, rep(1234, 12))
HYM <- HYM %>% select(ID, everything())

# identify the variables you want to skip over ... from these we can then
#   grab the starting pattern of the variables you want to keep/summarize
pass_vars <- paste0("A", c(13, 15, 18, 36, 42, 43,61, 65, 72))
keep_vars <- names(HYM %>% select(-ID, -starts_with(pass_vars)))
keep_vars.name1 <- keep_vars %>%
  gsub("_.*", "", .) %>%
  unique()

In your case, it will be useful to dynamically name and reference variables with sym and !! (a.k.a., bang-bang) in your mutate statements:

# using mutate to add on summary variables
for (i in keep_vars.name1) {
  var_names <- paste0(i, "_", 1:n_name2)
  new_vars  <- paste0(i, c("_self", "_home"))
  
  HYM <- HYM %>% mutate(
    !!sym(new_vars[1]) := case_when(
      (!!sym(var_names[1]) == 1) & (sum(is.na(!!sym(var_names[2])), 
                                        is.na(!!sym(var_names[3])), 
                                        is.na(!!sym(var_names[4]))) > 1) ~ 1,
      (!!sym(var_names[3]) == 1) &  (sum(is.na(!!sym(var_names[1])), 
                                         is.na(!!sym(var_names[2])), 
                                         is.na(!!sym(var_names[4]))) > 1) ~ 0,
      (!!sym(var_names[2]) == 1) &  (sum(is.na(!!sym(var_names[1])), 
                                         is.na(!!sym(var_names[3])), 
                                         is.na(!!sym(var_names[4]))) > 1) ~ 0,
      (!!sym(var_names[4]) == 1) &  (sum(is.na(!!sym(var_names[1])), 
                                         is.na(!!sym(var_names[2])), 
                                         is.na(!!sym(var_names[3]))) > 1) ~ -77,
      is.na(!!sym(var_names[1])) & is.na(!!sym(var_names[2])) &
        is.na(!!sym(var_names[3])) & is.na(!!sym(var_names[4])) ~ -99),
    !!sym(new_vars[2]) := case_when(
      (!!sym(var_names[2]) == 1) & (sum(is.na(!!sym(var_names[1])), 
                                        is.na(!!sym(var_names[3])), 
                                        is.na(!!sym(var_names[4]))) > 1) ~ 1,
      (!!sym(var_names[4]) == 1) &  (sum(is.na(!!sym(var_names[1])), 
                                         is.na(!!sym(var_names[2])), 
                                         is.na(!!sym(var_names[3]))) > 1) ~ -77,
      (!!sym(var_names[3]) == 1) &  (sum(is.na(!!sym(var_names[1])), 
                                         is.na(!!sym(var_names[2])), 
                                         is.na(!!sym(var_names[4]))) > 1) ~ 0,
      (!!sym(var_names[1]) == 1) &  (sum(is.na(!!sym(var_names[4])), 
                                         is.na(!!sym(var_names[2])), 
                                         is.na(!!sym(var_names[3]))) > 1) ~ -99,
      is.na(!!sym(var_names[1])) & is.na(!!sym(var_names[2])) &
        is.na(!!sym(var_names[3])) & is.na(!!sym(var_names[4])) ~ -99))
}
CzechInk
  • 443
  • 2
  • 13
  • Not quite what I was looking for, but this is incredibly useful as a start to what I am trying to achieve. I will try and adjust this to create my new self and home variables from three A1_1, A1_2, A1_3, A1_4 through A1_92, A2_92, A3_92, A4_92 variables. I need them to become categorical with three responses for 1 = yes, 2 = no, and -77 = does not apply. I am also interested in using a For Loop for my own edification as I am a beginner programmer. – Juan Cabrera Aug 07 '21 at 09:33
  • @JuanCabrera I've added an example using a for-loop. If the answer helps, consider giving it an upvote or marking it as the answer. If it does not, I suggest updating your question with a reproducible example (reprex; see https://stackoverflow.com/help/minimal-reproducible-example). The naming convention for variables in your comment ('A4_92') doesn't seem to match that in your question, and I'm not sure where the coding of '2 = no' comes into play. These are the type of details to include in your reprex so that you can quickly get the help you need. – CzechInk Aug 09 '21 at 17:43