r - 如何按 R 数据帧中每个 id 的百分位排序数据 [r]

标签 r dataframe percentile

我有一个数据框,其中包含 228 个人的 70-80 行有序响应时间 (rt) 数据,每个人都有一个唯一的 id#(每个人的行数并不相同)。我想将每个人的 RT 分为 5 个箱子。我希望第一个 bin 是他们最快的 20% RT,第二个 bin 是他们下一个最快的 20% RT,等等。每个 bin 中应该有相同数量的试验(除非试验总数是奇数) )。

我当前的数据框如下所示:

id     RT
7000   225
7000   250
7000   253
7001   189
7001   201
7001   225

我希望我的新数据框看起来像这样:

id   RT    Bin
7000  225    1
7000  250    1

让我的数据看起来像这样,我将按 id 和 bin 聚合

我能想到的唯一方法是将数据拆分为一个列表(使用 split 命令),循环每个人,使用分位数命令获取不同 bin 的断点,分配 bin 值(1-5) 每个响应时间。这感觉非常复杂(对我来说很难)。我有点麻烦,非常感谢任何有关如何简化此过程的帮助。谢谢。

最佳答案

@Chase 给出的答案将范围分为 5 组长度相等的组(端点不同)。你似乎想要的是五分位数(5组,每组数量相等)。为此,您需要 Hmisc

中的 cut2 函数
library("plyr")
library("Hmisc")

dat <- data.frame(id = rep(1:10, each = 10), value = rnorm(100))

tmp <- ddply(dat, "id", transform, hists = as.numeric(cut2(value, g = 5)))

tmp 现在有你想要的

> tmp
    id       value hists
1    1  0.19016791     3
2    1  0.27795226     4
3    1  0.74350982     5
4    1  0.43459571     4
5    1 -2.72263322     1
....
95  10 -0.10111905     3
96  10 -0.28251991     2
97  10 -0.19308950     2
98  10  0.32827137     4
99  10 -0.01993215     4
100 10 -1.04100991     1

每个id的每个hists中都有相同的数字

> table(tmp$id, tmp$hists)

     1 2 3 4 5
  1  2 2 2 2 2
  2  2 2 2 2 2
  3  2 2 2 2 2
  4  2 2 2 2 2
  5  2 2 2 2 2
  6  2 2 2 2 2
  7  2 2 2 2 2
  8  2 2 2 2 2
  9  2 2 2 2 2
  10 2 2 2 2 2

关于r - 如何按 R 数据帧中每个 id 的百分位排序数据 [r],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7669767/

相关文章:

python Pandas : How to create a binary matrix from column of lists?

python - Pandas - 堆叠多列

r - 如何使用已计算的值在 ggplot2 图上绘制 95 百分位数和 5 百分位数?

r - 如何将字符串转换为聚合分位数?

c# - 计算百分位数以去除异常值的快速算法

r - 无法安装ggp​​lot2

python - 从多列中过滤和替换

javascript - 单击 Shiny 的操作按钮后,将光标聚焦在 textArea 中

R:重复 data.frame 的行 k 次并为新行值添加前缀

python dataframe 做类似 oracle connect_by 的事情吗?