-1

问题:

如何以矢量化的方式将函数应用于数据的子集。

例子:

对于下面的数据框:

x=c(1,2,1,2,1,2)
y=c(3,4,5,4,3,2)
df=data.frame(x,y)

我想对每个 x 值的所有 y 值应用一个函数(即 min()),并将其收集在一个向量中。

基本上,我想要一个矢量化版本:

nb = max(x);
V = rep(0.0, nb)
for(i in 1:nb){
    v = df [ x == i,  ]$y;
    V[i] <- min(v);
}

# basically here:
# V[1] = min( df$y for x=1)
# V[2] = min( df$y for x=2)
4

1 回答 1

3

该功能tapply专为此类问题而设计:

with(df,tapply(y,x,FUN=min))
#1 2 
#3 2

如果要将结果添加到数据框中,可以使用以下功能ave

df$group.min <- with(df,ave(y,x,FUN=min))
#   x y group.min
# 1 1 3         3
# 2 2 4         2
# 3 1 5         3
# 4 2 4         2
# 5 1 3         3
# 6 2 2         2
于 2013-02-13T16:14:05.250 回答