4

いくつかの列を持つdata.frameがあります(17)。列2には同じ値の行がいくつかありますが、これらの行の1つ、特に列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 に答える