2015-08-10 5 views
0

Я пытаюсь использовать длинноформатный фреймворк данных и создавать из него несколько широкоформатных фреймов данных в соответствии со списком различных переменных.Передача имен переменных в mapply (с использованием изменения)

Моя мысль состоит в том, чтобы использовать mapply для передачи набора переменных, которые я хочу фильтровать по позициям в набор данных. Но это не похоже на то, что mapply может читать в списке vars.

данных:

library(dplyr) 
library(reshape2) 

set.seed(1234) 
data <- data.frame(
    region = sample(c("northeast","midwest","west"), 40, replace = TRUE), 
    date = rep(seq(as.Date("2010-02-01"), length=4, by = "1 day"),10), 
    employed = sample(50000:100000, 40, replace = T), 
    girls = sample(1:40), 
    guys = sample(1:40) 
) 

Для каждого из количественных переменных (используемые, девушки и парни), я хочу, чтобы создать широкоформатную dataframe с датами в виде строк, областей как колонны.

Могу ли я использовать mapply, чтобы сделать это более лаконично, чем работать с расплавом и dcast отдельно для каждого из {«занятых», «девочек», «парней»}?

Например:

mapply(function(d,y) {melt(d[,c('region','date',y)], id.vars=c('region','date'))}, 
    data, 
    c('employed','girls','guys') 
    ) 

говорит мне:

>Error in `[.default`(d, , c("region", "date", y)) : 
    incorrect number of dimensions 

Что я ищу, чтобы получить список из dataframes широкоформатных; Я полагал, что mapply будет самым простым способом передать несколько аргументов, но если есть лучший способ пойти на это, я все для этого.

Пример:

$employed 
     date midwest northeast west 
1 2010-02-01 62196 513366 119070 
2 2010-02-02 334849 271383 160552 
3 2010-02-03 187070 320594 119721 
4 2010-02-04 146575 311999 310009 

$girls 
     date midwest northeast west 
1 2010-02-01  40  154 26 
2 2010-02-02  88  76 61 
3 2010-02-03  67  84 39 
4 2010-02-04  48  95 42 

$guys 
     date midwest northeast west 
1 2010-02-01  16  140 43 
2 2010-02-02  115  70 43 
3 2010-02-03  63  64 42 
4 2010-02-04  54  94 76 
+0

Можете ли вы показать ожидаемый результат? возможно, 'library (data.table); setDT (данные) [, indx: = 1: .N, date]; dcast (data, indx + date ~ region, value.var = c ('used', 'girls', 'guys')) ' – akrun

+0

Похоже, что ожидаемый выходной и входной набор данных не соответствует. Использование 'mapply'' mapply (function (x, y) dcast (cbind (x, y), date ~ region, value.var = 'x', sum), список (данные [1: 2]), x = данные [3: 5], УПРОЩЕНИЕ = ЛОЖЬ) ' – akrun

ответ

1

старый режим ожидания раскола/lapply

d<-melt(data,id.vars=c("region","date")) 
lapply(split(d,d$variable),function(x) dcast(x,date~region,sum)) 

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

+0

Ahh гораздо более прямолинейно, учитывая, что все эти переменные попадают под столбец« переменная »при таянии данных –

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

  • Нет связанных вопросов^_^