Предполагая, что у меня есть dataframe, ДФ с этой информациейВызова рекурсивных функций в R
group wk source revenue 1 1 C 100 1 1 D 200 1 1 A 300 1 1 B 400 1 2 C 500 1 2 D 600
Я пытаюсь программно фильтровать вниз к строкам уникальных комбинаций группы, WK и источника, а затем выполнить некоторые операции над ними, прежде чем объединить их обратно в другую фреймворк. Я хочу написать функцию, которая может масштабироваться до любого количества сегментов (а не только сценария примера здесь) и фильтровать строки. Все, что мне нужно передать, будут имена столбцов, по которым я хочу сегментировать
например. seg <- c("group", "wk", "source")
Одна уникальная комбинация для фильтрации строк в ДФ будет
df %>% filter(group == 1 & wk == 1 & source == "A")
я написал рекурсивную функцию (get_rows), чтобы сделать это, но это, кажется, не делать то, что я хочу. Может ли кто-нибудь предоставить информацию о том, где я ошибаюсь?
library(dplyr)
filter_row <- function(df,x)
{
df %>% filter(group == x$group & wk == x$wk & source == x$source)
}
seg <- c("group", "wk", "source")
get_rows <- function(df,seg,pos = 1, l = list())
{
while(pos <= (length(seg) + 1))
{
if(pos <= length(seg))
for(j in 1:length(unique(df[,seg[pos]])))
{
k <- unique(df[,seg[pos]])
l[seg[pos]] <- k[j]
get_rows(df,seg,pos+1,l)
return()
}
if(pos > length(seg))
{
tmp <- df %>% filter_row(l)
<call some function on tmp>
return()
}
}
}
get_rows(df,seg)
EDIT: Я понимаю, что есть методы, которые я установка двоичные можно использовать, чтобы получить то, что мне нужно, но мне интересно, о том, где я буду неправильно в рекурсивной функции, которую я написал.
Если вы хотите уникальные комбинации, попробуйте [это] (http://stackoverflow.com/questions/8363278/how-to-filter-for-unique- сочетание-оф-колонны-из-ан-т-dataframe). Если вам нужны операторы с уникальными подразделами, попробуйте [this] (http://www.magesblog.com/2012/01/say-it-in-r-with-by-apply-and-friends.html), в частности Таблица данных. – bwarren2
Спасибо! Это очень полезно для этого контекста! Мне все еще интересно узнать, где я ошибаюсь в своей рекурсивной функции. –
Что заставляет вас думать, что это рекурсивно? Цикл While? – Molx