2015-12-04 4 views
0

Я пытаюсь вычислить 90-й процентиль всех выборок выборки станции по дате выборки по столбцам в фрейме данных. Было бы неплохо добавить это как новый столбец, но не обязательно.Вычислить 90-й процентиль по столбцам в кадре данных

Я перестраиваю свои данные следующим образом, хотя я не знаю, если это необходимо. Мне легко визуализировать этот путь.

library(dplyr) 
FecalData <- RawData %>% 
select(Station, SampleDate, FecalColiform) 

#Rearange by station 
library(reshape2) 
FecalbyStation <- dcast(FecalData, SampleDate ~ Station, fun.aggregate = mean, na.rm = TRUE) 

Это оставляет меня со следующим sturcture:

dput(FecalbyStation[1:5,]) 
structure(list(SampleDate = structure(c(6942, 6979, 7014, 7042, 
7070), class = "Date"), `114` = c(114.5, 2, 17, 7.9, 1.8), `115` = c(41, 
6.8, 33, 220, 4.5), `116` = c(64, 4, 14, 6.8, 1.8), `117` = c(33, 
2, 4.5, 1.8, 2), `118` = c(81.5, 2, 6.8, 33, 1.8), `119` = c(28, 
11, 4.5, 1.8, 2), `120` = c(64, 4.5, 11, 1.8, 1.8), `121` = c(31, 
4.5, 3.6, 13, 2), `122` = c(41, 2, 33, 13, 1.8), `123` = c(28, 
7.8, 2, 13, 1.8), `124` = c(NaN, 7.8, NaN, NaN, NaN), `125` = c(NaN, 
NaN, NaN, NaN, NaN), `126` = c(NaN, NaN, NaN, NaN, NaN), `127` = c(NaN, 
NaN, NaN, NaN, NaN), `128` = c(NaN, NaN, NaN, NaN, NaN), `129` = c(NaN, 
NaN, NaN, NaN, NaN), `614` = c(NaN, NaN, NaN, NaN, NaN), `615` = c(NaN, 
NaN, NaN, NaN, NaN), `639` = c(NaN, NaN, NaN, NaN, NaN), `758` = c(NaN, 
NaN, NaN, NaN, NaN)), .Names = c("SampleDate", "114", "115", 
"116", "117", "118", "119", "120", "121", "122", "123", "124", 
"125", "126", "127", "128", "129", "614", "615", "639", "758" 
), row.names = c(NA, 5L), class = "data.frame") 

я смог найти row.means() так и подправили этот код снова и снова, чтобы попытаться получить 90-й вместо этого. На пути я получил несколько разных ошибок. Вот код, который я приземлился на:

library(psych) 
Q90 <- sapply(FecalbyStation, -1, quantile, probs=c(.90), na.rm = TRUE) 

Это дает мне следующее сообщение об ошибке:

Error in match.fun(FUN) : '-1' is not a function, character or symbol 

В конце концов, я хотел бы, чтобы получившиеся 90-ой процентили временных рядов, так что я могу запустить Kendall или регрессии на нем, чтобы исследовать любую тенденцию к фекальным уровням для региона. Любые предложения или советы очень ценятся.

Спасибо!

+1

'применяются (ДФ [- 1], 2, квантиль, Probs = 0,9, na.rm = TRUE) '? – etienne

+1

ваш код работает 'sapply (FecalbyStation [, -1], quantile, probs = c (.90), na.rm = TRUE)' вы просто забыли скобки в '[, -1]' – rawr

+0

Большое вам спасибо! Такая простая ошибка. Я попробовал скобки раньше и получил неожиданную ошибку ['. Просмотрев код, который вы оба предоставили, я понял, что оставил запятую между «FecalColiform» и скобками, что было моей проблемой. Ваша помощь очень ценится. –

ответ

1

Вы можете сохранить ваши данные в длинной форме и получить 90-й процентиль по дате следующим образом:

library(dplyr) 

RawData %>% group_by(SampleDate) %>% 
    summarise(p90 = quantile(FecalColiform, probs=0.9, na.rm=TRUE)) 
+0

Большое вам спасибо! Это очень быстро и просто! –

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

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