2014-01-21 35 views
4

我有一个大数据框,其中一个列中包含状态名,另一列中包含不同索引。 我想通过状态子集并创建一个对象,使用已经给出的计算来最小化索引或数据帧。按数据级别设置数据框

这里是我有什么

m 
    x y 
1 A 1.0 
2 A 2.0 
3 A 1.5 
4 B 3.0 
5 B 3.5 
6 C 7.0 

一个简单的(短)的例子,我希望得到这个

m 
    x y 
1 A 1.0 
2 B 3.0 
3 C 7.0 

我不知道是否有一个功能循环是必要的。像

minimize<-function(x,...) 
for (i in m$x){ 
do something with data by factor value 
apply to that something the min function in every column 
return(y) 
} 

所以当你打电话

minimize(A) 
[1] 1 

我试过%使用%,但没有工作(我得到这个错误)。

A%以%米 错误匹配(X,表,NOMATCH = 0L):对象 'A' 未找到

当我定义它它是这样的。

A<-c("A") 
"A"%in%m 
[1] FALSE 

预先感谢您

+0

如果您需要使用这个子集要小心!首先检查是否有任何NA的最小功能会混淆它,并给你错误的最小值 –

回答

2

尝试aggregate

aggregate(y ~ x, m, min) 

    x y 
1 A 1 
2 B 3 
3 C 7 
+0

非常感谢你!我在R这么新,我花了2个小时寻找这个答案,没有人使用聚合。事实上,我现在还没有找到其他职位 –

+0

@MatiasAndina不客气! :) –

3

使用aggregate

> aggregate(.~x, FUN=min, dat) 
    x y 
1 A 1 
2 B 3 
3 C 7 

See this post得到一些其他的替代品。

1

使用data.table

require(data.table) 
m <- data.table(m) 

m[, j=min(y), by=x] 
# x V1 
# 1: A 1 
# 2: B 3 
# 3: C 7