В base R
мы можем использовать grep
, чтобы найти столбец 'pl' и соответствующий ему 'cl' (при условии, что оба набора столбцов находятся в одном и том же порядке в наборе данных)
plcols <- grep("^pl\\d+_sum", names(df1), value = TRUE)
clcols <- grep("^clr\\d+$", names(df1), value = TRUE)
df1[paste0(plcols, "_by_", clcols)] <- df1[plcols]/df1[clcols]
При tidyverse
существует несколько вариантов, одним из которых будет map2
library(dplyr)
library(purrr)
library(stringr)
map2_dfc(df1[plcols], df1[clcols], `/`) %>%
rename_all(~ str_c(., 'new')) %>%
bind_cols(df1, .)