我有数百万行数据,我需要创建一个子集。尽管努力并在网上搜索,但没有成功。问题是:
如何为所有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
任何提示都非常感谢。谢谢!
答案 0 :(得分:1)
我们可以使用aggregate
中的baseR
分组变量'ID'和'item'来获取'{1}}的'值'
min
或使用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