Есть ли простой способ (т.е. без использования «для» петель) сделать следующее:llply операция на несколько dataframes
У меня есть кадры пара данных. Я хочу использовать операцию plyr, чтобы суммировать их. В этом примере у меня есть два кадра данных: восток и запад, и я хочу обобщить оба из них с расходами и судебными разбирательствами по странам.
Вот кадры пример данных:
west <- data.frame(
spend = sample(50:100,50,replace=T),
trials = sample(100:200,50,replace=T),
country = sample(c("usa","canada","uk"),50,replace = T)
)
east <- data.frame(
spend = sample(50:100,50,replace=T),
trials = sample(100:200,50,replace=T),
country = sample(c("china","japan","skorea"),50,replace = T)
)
и объединенный список как dataframes:
combined <- c(west,east)
То, что я хочу сделать, это операция ddply типа на обоих этих dataframes в то в то же время, и выход будет списком (по крайней мере, это кажется наиболее простым). Например, если бы я просто работать на одном dataframe, это было бы что-то вроде:
country.df <- ddply(west, .(country), summarise,
spend = sum(spend),
trials = sum(trials)
)
Но я хочу сделать это в масштабе. Я попытался с помощью похожий синтаксис в llply аргумента, но это не работает (у меня есть чувство, что я что-то болезненно очевидное отсутствующее):
countries.list <- llply(combined, .(country), summarise,
spend = sum(spend),
trials = sum(trials)
)
Это возвращает ошибку: «Ошибка в FUN (X [[1L ]], ...): попытка применить нефункцию "
... Я могу придумать способ сделать это, написав функцию, а затем передав ее аргументу apply. Но похоже, что llply должен уметь справляться с этим «из коробки», поскольку это довольно простое использование того, что делает инструмент.
Что мне здесь не хватает?
Смотрите также HTTP: // вита. had.co.nz/papers/tidy-data.html - Я бы настоятельно рекомендовал хранить ваши данные в одном фрейме данных. – hadley