Обратите внимание, что в соответствии с требованиями комментариев этот вопрос был пересмотрен.Вывод процентилей путем фильтрации кадра данных
Рассмотрим следующий пример:
df <- data.frame(FILTER = rep(1:10, each = 10), VALUE = 1:100)
Я хотел бы, для каждого значения FILTER
, создать кадр данных, который содержит 1, 2, ..., 99-й процентили VALUE
. Конечный продукт должен быть
PERCENTILE df_1 df_2 ... df_10 1 [first percentiles] 2 [second percentiles]
и т.д., где df_i
основан на FILTER == i
.
Обратите внимание, что FILTER
, хотя он содержит цифры, на самом деле категоричен.
так, как я делал это с помощью dplyr
:
nums <- 1:10
library(dplyr)
for (i in nums){
df_temp <- filter(df, FILTER == i)$VALUE
assign(paste0("df_", i), quantile(df_temp, probs = (1:99)/100))
}
, а затем я бы cbind
этим (с 1:99
в первой колонке), но я предпочел бы не вводить каждый df
имя. Я рассмотрел использование цикла для имен этих фреймов данных, но это будет связано с использованием eval(parse())
.
Вероятно, 'mget' и' do.call', но, конечно, проблема _real_ здесь заключается в том, что у вас нет всех 'df_1, df_2' и т. Д. В начале списка. – joran
Чтобы получить наилучший ответ, не могли бы вы рассказать нам, как вы создали эти data.frames? Не подробно, но вы использовали цикл для чтения в csvs, используя 'assign'? –
@ sebastian-c В принципе - я не уверен, что это имеет отношение к проблеме; Я предполагаю, что это не так - я должен фильтровать на основе 'i' из фрейма данных, сгенерированного' sqlQuery() '. По очевидным причинам я не могу публиковать эти данные на этом веб-сайте. Кадры данных, имена которых содержат 'i', представляют собой все dfs, содержащие процентили отфильтрованного кадра данных. Все они имеют одинаковое количество строк и имеют только один столбец, как в этом примере, и я хотел бы «cbind» их использовать цикл. – Clarinetist