我有几百万行数据,我需要创建一个子集。尽管努力并在网络上搜索,但没有成功。问题是:
如何创建仅包含value
所有ID
&item
组合的最小值的子集?
数据结构如下所示:
> df = data.frame(ID = c(1,1,1,1,2,2,2,2),
item = c('A','A','B','B','A','A','B','B'),
value = c(10,5,3,2,7,8,9,10))
> df
ID item value
1 1 A 10
2 1 A 5
3 1 B 3
4 1 B 2
5 2 A 7
6 2 A 8
7 2 B 9
8 2 B 10
结果应如下所示:
ID item value
1 A 5
1 B 2
2 A 7
2 B 9
任何提示,不胜感激。谢谢!
我们可以结合分组变量'ID'和'item'使用aggregate
frombaseR
来获取min
'value'
aggregate(value~., df, min)
# ID item value
#1 1 A 5
#2 2 A 7
#3 1 B 2
#4 2 B 9
或使用 dplyr
library(dplyr)
df %>%
group_by(ID, item) %>%
summarise(value = min(value))
或搭配 data.table
library(data.table)
setDT(df)[, .(value = min(value)) , .(ID, item)]
或者另一个选择是在分组后order
获取first
行
setDT(df)[order(value), head(.SD, 1), .(ID, item)]
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句