#r
Вопрос:
Кто-нибудь знает способ вернуть три кадра данных с похожими именами без копирования и вставки?
В основном способ написать это:
mean_dbh lt;- aggregate(dbh ~ date plot, data, mean) mean_agb lt;- aggregate(agb ~ date plot, data, mean) mean_ba lt;- aggregate(ba ~ date plot, data, mean)
что-то вроде
for (val in c('dbh','agb','ba)){ mean_'val' lt;- aggregate(val ~ date plot, data, mean) }
Ответ №1:
В качестве альтернативы, вы могли бы попробовать это. Сначала создайте один фрейм данных со всеми переменными, а затем выберите каждую переменную для нового файла:
library(dplyr) df lt;- aggregate(cbind(dbh,agb,ba) ~ date plot, data, mean) val lt;- c('dbh','agb','ba') for (i in seq(length(val))){ assign(paste0('mean_', val[i]), df %gt;% select(date, plot, val[i]))}
Комментарии:
1. Мистер Клик дал ценный совет, но также мне очень хотелось узнать функцию paste0, она полезна. Спасибо!
Ответ №2:
В R мы стараемся избегать создания переменных со значениями, хранящимися в именах переменных. Это в целом значительно усложняет работу с этими данными.фреймами. Лучше работать со связанными значениями в списке. Вот альтернативный способ решения вашей проблемы
vars lt;- c("dbh","agb","ba") mean_var lt;- vars |gt; sapply(function(x) reformulate(c("date","plot"), response = x)) |gt; lapply(function(x) aggregate(x, data, mean)) |gt; setNames(vars)
Это создаст список, и вы сможете извлечь значения с помощью
mean_var$dbh mean_var$agb mean_var$ba # or... mean_var[[1]] mean_var[[2]] mean_var[[3]]