Вот одна идея.
Сначала создайте новый фрейм данных с двумя столбцами, показывающими имена столбцов для сравнения.Обратите внимание, что я удалил один с теми же именами и той же парой сравнения.
dat <- expand.grid(x = names(df), y = names(df))
dat <- dat[dat$x != dat$y, ]
dat <- data.frame(t(apply(dat, 1, sort)), stringsAsFactors = FALSE)
dat <- dat[!duplicated(dat), ]
names(dat) <- c("x", "y")
После этого мы можем использовать mapply
для циклического просмотра комбинаций и генерирования вывода следующим образом.
dat$Result <- mapply(function(x, y){
identical(df[[x]], df[[y]])
}, dat$x, dat$y, SIMPLIFY = TRUE)
dat
# x y Result
# 2 A.a A.b TRUE
# 3 A.a A.c FALSE
# 4 A.a B.a FALSE
# 7 A.b A.c FALSE
# 8 A.b B.a FALSE
# 12 A.c B.a FALSE
Обновление
Как уже упоминалось @thelatemail, функция combn
облегчает выполнение первой части.
dat <- data.frame(t(combn(names(df), 2)), stringsAsFactors = FALSE)
dat$Result <- mapply(function(x, y){
identical(df[[x]], df[[y]])
}, dat$X1, dat$X2, SIMPLIFY = TRUE)
dat
# X1 X2 Result
# 1 A.a A.b TRUE
# 2 A.a A.c FALSE
# 3 A.a B.a FALSE
# 4 A.b A.c FALSE
# 5 A.b B.a FALSE
# 6 A.c B.a FALSE