4

可能重复:
仅保留每个因子水平的最小值

这是我的问题,我想在指定列中选择具有最小值的行。例如:

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

我想要的结果是

 A value
 a     1
 b     3

我可以使用byand 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 回答