按因子水平对数据框进行子集化

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

我不知道是否需要使用带有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%in%m match(x,table,nomatch = 0L)中的错误:对象'A'未找到
当我定义它时,它会变成这样。
A<-c("A")
"A"%in%m
[1] FALSE

Thank you in advance


如果您需要使用此子集,请小心!首先检查是否有任何NA,因为min函数会对其进行干扰并给出错误的最小值。 - Matias Andina
3个回答

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

请查看此帖子获取其他替代方案。


2
尝试使用 aggregate
aggregate(y ~ x, m, min)

  x y
1 A 1
2 B 3
3 C 7

非常感谢!!!我在R方面很新,花了两个小时在这里搜索答案,没有人使用aggregate。事实上,在现在之前,我找不到那些其他替代方法的帖子。 - Matias Andina

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接