4

重複の可能性:
各因子レベルの最小値のみを保持します

これが私の問題です。指定された列で最小値の行を選択したいと思います。例えば:

df <- data.frame(A=c("a","a","b","b"),value=1:4)

私が欲しい結果は

 A value
 a     1
 b     3

byとで行うことはできますがddply、dfが巨大で、で多くの異なる値を持つ場合、それらは非常に遅くなりますA

do.call(rbind,by(df,df$A, function(x) x[which.min(abs(x$value)),],simplify=FALSE))

ddply(df, ~A, function(x){x[which.min(abs(x$value)),]})

助言がありますか?

どうもありがとう!

4

2 に答える 2

2

data.tableキーを設定すると、大きなdata.framesで非常に高速になります。

dt <- data.table(df, key="A")
dt[, list(value=min(value)), by=A]

参考文献:

于 2012-11-21T18:20:57.667 に答える
0

tapply はこれを行います:

> tapply(df$value, df$A, min)
a b 
1 3 

編集済み:byの代わりに 使用するとtapply、行名を保持できます。

df <- data.frame(A=c("a","a","b","b"),value=11:14)
df
##   A value
## 1 a    11
## 2 a    12
## 3 b    13
## 4 b    14

do.call(rbind, unname(by(df, df$A, function(x) x[x$value == min(x$value),])))
##   A value
## 1 a    11
## 3 b    13
于 2012-11-21T18:15:09.237 に答える