применение одной функции к всем возможным комбинациям датафреймов
У меня имеется ряд датафреймов с более чем одной переменной в нем. Мне необходимо найти все возможные комбинации которыми можно сгруппировать эти датафреймы и применить к одной из переменных одну и ту же функцию. В примере я применяю функцию рассчитывающую корреляцию. Далее я объединяю результаты комбинации каждой пары в общий фрейм в котором записан результат выполнения функции и то к какой паре он относится. Сейчас я делаю это довольно топорным способом (как в моем примере) и ищу способ выполнения этих операций с более высокой скоростью, без такого большого кода.
a <- data.table(c(1,2,3,4), c(5,6,7,8))
b <- data.table(c(2,3,4,5), c(6,7,8,9))
c <- data.table(c(3,4,5,6), c(7,8,9,10))
a_a <- cor(a$V1, a$V1)
a_b <- cor(a$V1, b$V1)
a_c <- cor(a$V1, c$V1)
b_a <- cor(b$V1, a$V1)
b_b <- cor(b$V1, b$V1)
b_c <- cor(b$V1, c$V1)
c_a <- cor(c$V1, a$V1)
c_b <- cor(c$V1, b$V1)
c_c <- cor(c$V1, c$V1)
total <- rbind(a_a, a_b, a_c, b_a, b_b, b_c, c_a, c_b, c_c)
Ответы (1 шт):
Если передаить несколько data.table в функцию data.table, то эти таблицы будут объединены с помозью cbind. В коде ниже мы используем аналогичный принцип, но с небольшой хитростью, чтобы получить удобные имена столбцов.
> l <- list(a, b, c)
> setattr(l, "names", c("a", "b", "c"))
> x <- as.data.table(l)
> x
a.V1 a.V2 b.V1 b.V2 c.V1 c.V2
1: 1 5 2 6 3 7
2: 2 6 3 7 4 8
3: 3 7 4 8 5 9
4: 4 8 5 9 6 10
> cor(x)
a.V1 a.V2 b.V1 b.V2 c.V1 c.V2
a.V1 1 1 1 1 1 1
a.V2 1 1 1 1 1 1
b.V1 1 1 1 1 1 1
b.V2 1 1 1 1 1 1
c.V1 1 1 1 1 1 1
c.V2 1 1 1 1 1 1