我正在尝试在R中进行一些简单的基准测试。我有一个包含多个数字和许多因素的数据帧。
我要做的是根据关联的因子值找到名为ALoS的变量的顶部十分位数和顶部四分位数,然后将这些值附加回原始数据框
在excel中,这相当于一个类似于以下的数组公式:
{=percentile(if(Factor_range = Factor, ALoS_range),k)}
答案 0 :(得分:1)
你似乎有两个问题。至于第一个,为了计算分位数,由于你还没有为我们提供数据集,我将组成一个。看看以下是否回答了这个问题。
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))
关于第二个问题,要将其附加回数据框,我真的不明白你的意思。请给我们一个想要输出的例子。
答案 1 :(得分:1)
现在是使用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