2012-01-20 2 views
25

Я хочу разбить большой фрейм данных в список данных в соответствии со значениями в двух столбцах. Затем я хочу применить общее преобразование данных для всех фреймов данных (преобразование лаг) в результирующий список. Я знаю команду split, но могу заставить ее работать только с одним столбцом данных.Разделить данные с использованием двух столбцов данных и применить общее преобразование в списке результирующих кадров данных

ответ

6

как об этом один:

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

походит на работу для plyr отличном пакета и ddply() функции. Если есть все еще открытые вопросы, пожалуйста, предоставьте некоторые примеры данных. Нарезка должна работать на нескольких колонках, а также:

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

Спасибо за ответы! Выяснилось, что мне нужно было поместить переменные split в список и позаботиться о проблеме «расщепления», используя два vars. Прочитайте пакет plyr, и он действительно мощный. Не могу заставить его делать то, что я хочу, однако. Пробовал эту команду: llply (1: length (List), function (i) {temp <-List [[i]] $ a; Список [[i]] $ b <-append (head (temp, -1), na, after = 0)}) и ожидали найти новую переменную 'b' в каждом кадре данных, содержащемся в «List». Команда выводит на экран список результатов [[i]] $ b. Что я неправильно понял? – user1160760

38

Вы должны поместить все факторы, которые необходимо разделить на в списке, например:

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

Затем вы можете использовать lapply на это сделать что еще вы хотите сделать.

Смежные вопросы