按因子级别对数据进行子集

时间:2014-01-21 19:04:43

标签: r function for-loop subset

我有一个大数据框,其中一个列中包含状态名,另一列中包含不同的索引。 我希望按状态进行子集化,并创建一个适合于最小化索引的对象或已经给出计算的数据框。

这是我所拥有的一个简单(简短)的例子

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

我不知道是否需要带有for循环的函数。喜欢

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

我尝试使用%in%但不起作用(我收到此错误)。

以%米A% 匹配错误(x,table,nomatch = 0L):找不到对象'A'

当我定义它时,就像这样。

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

提前谢谢

3 个答案:

答案 0 :(得分:3)

使用aggregate

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

See this post获得其他选择。

答案 1 :(得分:2)

尝试aggregate

aggregate(y ~ x, m, min)

  x y
1 A 1
2 B 3
3 C 7

答案 2 :(得分: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