Как перебрать столбцы с помощью map2_dfr, purrr - PullRequest
0 голосов
/ 09 апреля 2019

Я выполняю функцию попарно для всех переменных в наборе данных.Например, предположим, что необработанные данные - это 4 переменные с 5 наблюдениями (проиндексированы), а функция - это только разница.Желаемым результатом будет 6 попарных разностей в каждом из 5 наблюдений.

Это достаточно просто для небольшого постоянного набора переменных, но я не знаю, как сделать его масштабируемым.Масштабируемость в идеале означала бы все перечисленное ниже, но для начала я был бы рад получить эффективный код # 1

1) для итерации парного процесса Первичная цель

2) удаление избыточной информации (т. Е. Не нужно вычислять переменную 1-переменную 2, если уже была запущена переменная 2-переменная 1)

3) минимальный ручной труд, такой как присвоение имен переменных

4) самообновление, если изменяется набор, имена или количество переменных

Я пробовал серию циклов while, но это уже громоздко.Я попытался использовать функции apply и purrr / map, но не могу найти способ перебора каждого столбца в качестве входных данных для функции.Я также попытался расширить.grid, но это неправильно, поскольку я пытаюсь запустить функцию для «фактических» индексированных переменных, а не для идентификации комбинаций.

library(purrr)

#define example vectors and generate df
aa=c(1,2,3,4,5)
bb=c(10,20,30,40,50)
cc=c(100,200,300,400,500)
dd=c(5,10,15,20,25)
df=data.frame(cbind(aa,bb,cc,dd))

#define difference function
slope=function(x,y){
  slope=y-x
  dfslope=as.data.frame(slope)
}

#output
purrrout=map2_dfr(aa,bb,purrrcurve)
purrrout
slope
1     9
2    18
3    27
4    36
5    45

Этот код отлично работает для одной непротиворечивой парыданные, но я не знаю, как расширить его для итерации по парам (bb-aa, cc-aa, dd-aa, cc-bb, dd-bb, dd-cc).

Спасибоза любую помощь и все мысли.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...