Умножить столбец на каждый второй столбец - PullRequest
1 голос
/ 11 марта 2019

Предполагается, что у меня есть кадр данных, состоящий из трех столбцов

df1 <- data.frame(a=runif(10),b=runif(10),c=runif(10),d=runif(10))

И хотите иметь столбец продуктов всех комбинаций, кроме столбца, умноженного на себя

a*b, a*c, a*d, b*c, b*d, c*d

Решение, которое я ищу, должно работать для любого количества столбцов, а не только для пяти

Ответы [ 2 ]

2 голосов
/ 11 марта 2019

Мы можем использовать combn, чтобы создать комбинацию имен данных, взятых по 2, за раз, а затем написать пользовательскую функцию, которая подставляет подкадр данные и умножает их друг на друга.

combn(names(df1), 2, function(x) df1[x[1]] * df1[x[2]], simplify = FALSE)

Эта команда возвращает список из 6 кадров данных (a*b, a*c, a*d, b*c, b*d, c*d) для данного примера.

1 голос
/ 11 марта 2019

Мы могли бы использовать combn непосредственно в наборе данных, указать m как 2 для выбора парной комбинации столбцов, указать FUN как Reduce с его параметром f как * для умножениясоответствующие элементы каждого попарного столбца

combn(df1, 2, FUN = Reduce, f = `*`)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...