如何基于一列的值将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%构建子集?
谢谢!
答案 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)