我有一个包含多个列的数据框(17)。 第2列有几行具有相同的值,我想只保留其中一行,特别是第17列中具有最大值的行。
例如:
A B
'a' 1
'a' 2
'a' 3
'b' 5
'b' 200
Would return
A B
'a' 3
'b' 200
(加上其他列)
到目前为止,我一直在使用这个独特的功能,但我认为它会随机保留一个或保留第一个出现的功能。
**更新** 实际数据有376000行。我已经尝试了data.table和ddply建议,但它们需要永远。有什么想法最有效吗?
答案 0 :(得分:6)
使用包data.table
的解决方案:
set.seed(42)
dat <- data.frame(A=c('a','a','a','b','b'),B=c(1,2,3,5,200),C=rnorm(5))
library(data.table)
dat <- as.data.table(dat)
dat[,.SD[which.max(B)],by=A]
A B C
1: a 3 0.3631284
2: b 200 0.4042683
答案 1 :(得分:3)
使用R基本功能的不太优雅的解决方案
> ind <- with(dat, tapply(B, A, which.max)) # Using @Roland's data
> mysplit <- split(dat, dat$A)
> do.call(rbind, lapply(1:length(mysplit), function(i) mysplit[[i]][ind[i],]))
A B C
3 a 3 0.3631284
5 b 200 0.4042683