2015-12-04 264 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) 

這給我留下了以下內在張力結構:

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百分位數時間序列,這樣我可以運行肯德爾或對其進行迴歸來調查該地區糞便水平的任何趨勢。任何建議或建議非常感謝。

謝謝!

+1

'申請(DF [, - 1,2,分位數,probs = 0.9,na.rm = TRUE)'? – etienne

+1

你的代碼工作'sapply(FecalbyStation [,-1],分位數,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

非常感謝!這非常快速和簡單! –