我有以下資料框:
test <- tibble(
period = c(
'2019_q1',
'2019_q1',
'2019_q1',
'2019_q1',
'2019_q1',
'2019_q2',
'2019_q2',
'2019_q2',
'2019_q2',
'2019_q2',
'2019_q2',
'2019_q2',
'2019_q2'
),
company = c(
'google',
'facebook',
'amazon',
'ebay',
'wikipedia',
'google',
'youtube',
'amazon',
'wikipedia',
'yelp',
'yahoo',
'tide',
'target'
),
source = c('website',
'website',
'website',
'website',
'website',
'phone',
'phone',
'phone',
'phone',
'phone',
'phone',
'phone',
'phone'),
values = c(10,
20,
30,
50,
90,
6,
12,
45,
52,
80,
92,
8,
17)
)
我想使用以下分組計算此資料框的百分位數:
group_by(period, source)
但是,每當我嘗試使用以下代碼執行此操作時,我都會收到錯誤訊息:
mutate() 中的錯誤:!計算百分位數 =
quantile(values, probs = seq(0, 1, 0.25)) 時出現問題。x 百分位數的大小必須為 1,而不是 5。 i 第 1 組中發生錯誤:期間 =“2019_q1”,
來源 =“網站”。
使用此代碼時:
test %>%
group_by(period, source) %>%
arrange(period, source) %>%
filter(!is.na(values)) %>%
mutate(percentile = quantile(values, probs = seq(0,1,0.25)))
我試圖通過時間段和來源的分組來找出這些值中的每一個的百分位數。
例如,對于第一個分組,新列將如下所示:
時期 | 公司 | 價值觀 | 百分位數 |
---|---|---|---|
2019_q1 | 谷歌 | 10 | 25 |
2019_q1 | 20 | 25 | |
2019_q1 | 亞馬遜 | 30 | 50 |
2019_q1 | 易趣 | 10 | 50 |
2019_q1 | 維基百科 | 90 | 75 |
新更新= 按期間和源列分組
uj5u.com熱心網友回復:
要找到百分位數,您不應該使用該quantile
函式,而是使用它的逆累積分布函式 (CDF)。
test$percentile <- unlist(tapply(test$values, test$period, function(x) {
f <- ecdf(x)
f(x)*100
}))
在這里,我使用了經驗分布ecdf
函式dnorm
(dbeta
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/496097.html