2012-01-20 13 views
25

Chcę podzielić dużą ramkę danych na listę ramek danych zgodnie z wartościami w dwóch kolumnach. Następnie chcę zastosować wspólną transformację danych dla wszystkich ramek danych (transformacja opóźnienia) na liście wynikowej. Jestem świadomy polecenia split, ale mogę go uruchomić tylko w jednej kolumnie danych naraz.Podzielenie ramki danych za pomocą dwóch kolumn danych i zastosowanie wspólnej transformacji na liście wynikowych ramek danych

Odpowiedz

6

jak o tym jednym:

library(plyr) 
ddply(df, .(category1, category2), summarize, value1 = lag(value1), value2=lag(value2)) 

wygląda na zadanie dla Excelent plyr pakietu i ddply() funkcji. Jeśli nadal masz pytania otwarte, podaj kilka przykładowych danych. Dzielenie powinien działać na kilku kolumn, a także:

df<- data.frame(value=rnorm(100), class1=factor(rep(c('a','b'), each=50)), class2=factor(rep(c('1','2'), 50))) 
g <- c(factor(df$class1), factor(df$class2)) 
split(df$value, g) 
+0

Dzięki za odpowiedzi! Zorientowałem się, że muszę umieścić zmienne dzielone na liście i że zadbałem o problem "dzielenia" za pomocą dwóch zmiennych. Czytaj dalej na pakiecie plyr i rzeczywiście jest potężny. Nie mogę sprawić, żeby zrobił to, co chcę. Próbowałem tego polecenia: llply (1: length (List), function (i) {temp <-List [[i]] $ a; List [[i]] $ b <-append (head (temp, -1), na, after = 0)}) i oczekuje znaleźć nową zmienną "b" w każdej ramce danych zawartej w "Liście". Polecenie wyświetla listę wyników [[i]] $ b na ekranie. Co źle zrozumiałem? – user1160760

38

Musisz umieścić wszystkie czynniki, które mają być podzielone przez w wykazie, np:

split(mtcars,list(mtcars$cyl,mtcars$gear)) 

Następnie można użyć lapply na to zrobić co jeszcze chcesz zrobić.

Powiązane problemy