我有一个包含3列的数据帧。 A,B,C。有多个行对应于列a的每个唯一值。我想选择对应于列a的每个唯一值的前5行。列c是一些值,并且数据框已经按降序排序,所以这不会成为问题。任何人都可以请建议我如何能在R.为R数据帧中列的每个唯一值选择最大有限行数
0
A
回答
4
偷@ ptocquin的例子,这里是你如何使用基础功能by
。您可以使用do.call
将结果展平(请参阅下文)。
> by(data = data, INDICES = data$a, FUN = function(x) head(x, 5))
# or by(data = data, INDICES = data$a, FUN = head, 5)
data$a: 1
a b c
21 1 0.1188552 1.6389895
41 1 1.0182033 1.4811359
61 1 -0.8795879 0.7784072
81 1 0.6485745 0.7734652
31 1 1.5102255 0.7107957
------------------------------------------------------------
data$a: 2
a b c
15 2 -1.09704040 1.1710693
85 2 0.42914795 0.8826820
65 2 -1.01480957 0.6736782
45 2 -0.07982711 0.3693384
35 2 -0.67643885 -0.2170767
------------------------------------------------------------
类似的事情可以通过拆分基于a
您data.frame,然后使用lapply
来逐步每一个元素子集化第一n
行来实现。
split.data <- split(data, data$a)
subsetted.data <- lapply(split.data, FUN = function(x) head(x, 5)) # or ..., FUN = head, 5) like above
flatten.data <- do.call("rbind", subsetted.data)
head(flatten.data)
a b c
1.21 1 0.11885516 1.63898947
1.41 1 1.01820329 1.48113594
1.61 1 -0.87958790 0.77840718
1.81 1 0.64857445 0.77346517
1.31 1 1.51022545 0.71079568
2.15 2 -1.09704040 1.17106930
2.85 2 0.42914795 0.88268205
2.65 2 -1.01480957 0.67367823
2.45 2 -0.07982711 0.36933837
2.35 2 -0.67643885 -0.21707668
1
这里做,这是我的尝试:
library(plyr)
data <- data.frame(a=rep(sample(1:20,10),10),b=rnorm(100),c=rnorm(100))
data <- data[rev(order(data$c)),]
head(data, 15)
a b c
28 6 1.69611039 1.720081
91 11 1.62656460 1.651574
70 9 -1.17808386 1.641954
6 15 1.23420550 1.603140
23 7 0.70854914 1.588352
51 11 -1.41234359 1.540738
19 10 2.83730734 1.522825
49 10 0.39313579 1.370831
80 9 -0.59445323 1.327825
59 10 -0.55538404 1.214901
18 6 0.08445888 1.152266
86 15 0.53027267 1.066034
69 10 -1.89077464 1.037447
62 1 -0.43599566 1.026505
3 7 0.78544009 1.014770
result <- ddply(data, .(a), "head", 5)
head(result, 15)
a b c
1 1 -0.43599566 1.02650544
2 1 -1.55113486 0.36380251
3 1 0.68608364 0.30911430
4 1 -0.85406406 0.05555500
5 1 -1.83894595 -0.11850847
6 5 -1.79715809 0.77760033
7 5 0.82814909 0.22401278
8 5 -1.52726859 0.06745849
9 5 0.51655092 -0.02737905
10 5 -0.44004646 -0.28106808
11 6 1.69611039 1.72008079
12 6 0.08445888 1.15226601
13 6 -1.99465060 0.82214319
14 6 0.43855489 0.76221979
15 6 -2.15251353 0.64417757
+0
请注意,@RomanLuštrik的解决方案比我的效率高得多:10倍更快! – ptocquin
相关问题
- 1. R数据帧每行都有唯一的值
- 2. 从数据帧的单个列中选择唯一值
- 3. R - 选择数据帧的唯一因子列
- 4. 基于最大列值从列表中选择数据帧
- 5. 转换一个数据帧为数值数据帧中的R
- 6. 从数据帧中的每一列中查找最大值
- 7. 在R数据帧的另一列中提取具有最大值的唯一行
- 8. 从R中较大的数据帧中减去一个较小的数据帧而没有唯一的行ID
- 9. 来自几个数据帧中的每一个的最大值
- 10. 选择一列的每个唯一值
- 11. MySQL为列中每个唯一项目选择计数行
- 12. 选择每个索引值的一个行,最大列值
- 13. SQL:为每个唯一密钥选择最大值?
- 14. 数据帧中的值的最大一阶导数R
- 15. DQL选择具有一列最大值的每一行
- 16. 为具有多列的每一行选择最小值和最大值
- 17. 从R数据帧中选择一个范围的行
- 18. 选择具有唯一值的行数
- 19. 添加每个列在数据帧R是行的最后一列的最后一个值
- 20. 根据唯一值的数量在R中重塑数据帧
- 21. 选择第一行中的值在大熊猫数据帧
- 22. 从NA值最小的数据帧中选择一行
- 23. 如何根据时间戳和使用SQL的唯一ID为每一行数据选择最大值?
- 24. 为每个数组值选择一行
- 25. 的Python大熊猫数据帧:找到最大的每个唯一值的另一列
- 26. R:获取与大多数出现在数据帧中的值的每一行
- 27. R - 在数据帧的子集中查找所有唯一值
- 28. 拓宽一个数据帧以获取catogorical列的所有唯一值的收入每月金额中的R
- 29. 选择具有最大值(有条件)的唯一行
- 30. 如何在一列中选择中的行数据框具有最大值
'plyr :: ddply'和'head'或'data.table'的组合。 SO – mnel
上有很多例子,如果在查找与您的问题类似的SO帖子之后,仍然找不到有用的答案,[可重现的示例](http://stackoverflow.com/questions/) 5963269/how-to-make-a-great-r-reproducible-example)将有很大帮助 – BenBarnes