1

次の(簡略化された)データセットがあります。

df <- data.frame(a=c("A","A","B","B","B"),x=c(1,2,3,3,4))
df
  a x
1 A 1
2 A 2
3 B 3
4 B 3
5 B 4

私は大規模なデータセットを扱っているので、data.table パッケージを使用します。

これらの行を df で取得する方法はありますか。ここで、x は a によって最小にグループ化されています。この場合、1、3、4 行目を選択します。

何かのようなもの

df[,min(x),by=a]

しかし、それは私が欲しい行を私に与えません.aでグループ化されたxの最小値を表示するだけです.

助言がありますか?

4

2 に答える 2

6
library(data.table)
dt <- data.table(a=c("A","A","B","B","B"), x=c(1,2,3,3,4))

これらは一意の行のみを提供します。

dt[, .SD[which.min(x)], by=a]

または、次のようにします。

setkeyv(dt, c("a","x"))
dt[unique(dt[,a]), mult="first"]

すべての関係を持ちたいので:

dt[,.SD[x==min(x)], by=a]

以下を使用することもできます。

setkeyv(dt,c("a","x"))
dt[dt[unique(dt[,a]), mult="first"]]

非常に大きなグループがある場合、これはより効率的です。

于 2013-08-09T08:16:47.490 に答える