Иногда лучше кодировать, не задумываясь:
df <- data.frame(A = c(1, 0, 1),
B = c(0, 1, 0),
C = c(1, 1, 0))
J <- K <- seq_along(df)
J_n <- K_n <- names(df)
for (j in J) {
for (k in K) {
if (j < k) {
j_name <- J_n[j]
k_name <- K_n[k]
df[[paste0(j_name, k_name)]] <- df[[j]] * df[[k]]
}
}
}
Предполагается, что новые имена отсутствуют в исходном фрейме данных.Поэтому, если ваш исходный фрейм данных содержал столбцы A
, B
и AB
, это не сработает.