作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个数据框,其中包含 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/
我是一名优秀的程序员,十分优秀!