4

我有一个包含几列(17)的data.frame。第 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 建议,但它们需要永远。知道哪个最有效吗?

4

2 回答 2

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
于 2013-01-15T10:51:06.443 回答
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
于 2013-01-15T10:54:37.183 回答