Я пытаюсь использовать длинноформатный фреймворк данных и создавать из него несколько широкоформатных фреймов данных в соответствии со списком различных переменных.Передача имен переменных в 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
Можете ли вы показать ожидаемый результат? возможно, 'library (data.table); setDT (данные) [, indx: = 1: .N, date]; dcast (data, indx + date ~ region, value.var = c ('used', 'girls', 'guys')) ' – akrun
Похоже, что ожидаемый выходной и входной набор данных не соответствует. Использование 'mapply'' mapply (function (x, y) dcast (cbind (x, y), date ~ region, value.var = 'x', sum), список (данные [1: 2]), x = данные [3: 5], УПРОЩЕНИЕ = ЛОЖЬ) ' – akrun