首页 文章

如何以向量化方式将函数应用于数据子集[重复]

提问于
浏览
-1

这个问题在这里已有答案:

Question:

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

Example:

对于以下数据框:

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)

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
    

相关问题