簡體   English   中英

在R中,基於標志/因子值的分位數

[英]In R, Quantile based on flag/ factor value

我正在嘗試在R中進行一些簡單的基准測試。我有一個包含多個數值和許多因素的數據框。

我正在嘗試做的是根據關聯的因子值找到稱為ALoS的變量的最高十進制和最高四分位數,然后將這些值附加回原始數據幀

在excel中,這等效於類似於以下數組公式: {=percentile(if(Factor_range = Factor, ALoS_range),k)}

您似乎有兩個問題。 至於第一個,為了計算分位數,因為您沒有為我們提供數據集,所以我將組成一個。 查看以下內容是否回答了問題。

set.seed(954)
dat <- data.frame(A = sample(letters[1:3], 20, TRUE), X = rnorm(20))
dat
quantile(dat$X[dat$A == "a"], probs = c(0.75, 0.90))

至於第二個問題,要將其附加到數據框中,我真的不明白您的意思。 請給我們一個想要的輸出的例子。

這是使用ave函數的好時機:

dat$top_q <- ave(dat$X, dat$A, FUN = function(x) quantile(x, .75))
dat$top_d <- ave(dat$X, dat$A, FUN = function(x) quantile(x, .9))

   A          X    top_q     top_d
1  a  1.7150650 1.346828 1.5677700
2  b  0.4609162 0.390532 0.4308438
3  a -1.2650612 1.346828 1.5677700
4  b -0.6868529 0.390532 0.4308438
5  b -0.4456620 0.390532 0.4308438
6  a  1.2240818 1.346828 1.5677700
7  b  0.3598138 0.390532 0.4308438
8  b  0.4007715 0.390532 0.4308438
9  b  0.1106827 0.390532 0.4308438
10 a -0.5558411 1.346828 1.5677700

數據

set.seed(123)
dat <- data.frame(A = sample(letters[1:2], 10, TRUE), X = rnorm(10))

   A          X
1  a  1.7150650
2  b  0.4609162
3  a -1.2650612
4  b -0.6868529
5  b -0.4456620
6  a  1.2240818
7  b  0.3598138
8  b  0.4007715
9  b  0.1106827
10 a -0.5558411

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM