将R中的数据集分为3个子集:较低的25%,中间的50%和顶部的25%

时间:2018-12-12 12:47:17

标签: r subset

如何基于一列的值将data.frame数据分为三部分?我想通过在不同子集中构建均值来显示曲线的u形。 我已经弄清楚了如何获得随机的最高和最低值,以及如何获得最高x和最低x百分比。(例如25%/ 50%/ 25%)

low.x <- top_n(final_data, -100, final_data$variablex)
high.x <- top_n(final_data, 100, final_data$variablex)

OR(例如……仍然给我low.x的错误输出)

n <- 25
low.x <- subset(final_data, final_data$variablex < quantile(final_data$variablex, prob = 1 - n/100))
high.si <- subset(final_data, final_data$variablex > quantile(final_data$variablex, prob = 1 - n/100))

但是...如何根据较低的25%,主要的50%和最高的75%构建子集?

谢谢!

1 个答案:

答案 0 :(得分:2)

基于分位数g创建分组变量quant,然后按其拆分数据。输入无需排序。

x <- 1:12 # test data

quant <- quantile(x, c(0, .25, .75, 1))
g <- cut(x, quant, include.lowest = TRUE, lab = c("lo", "mid", "hi"))
split(x, g)

给予:

$`lo`
[1] 1 2 3

$mid
[1] 4 5 6 7 8 9

$hi
[1] 10 11 12

数量

也可以使用gtools的quantcut以更紧凑的形式完成此操作。这还会对副本进行更复杂的处理。

library(gtools)

g <- quantcut(x, c(0, .25, .75, 1), lab = c("lo", "mid", "hi"))
split(x, g)