首页 文章

如何使用dplyr按因子操作data.frame

提问于
浏览
3
df <- data.frame(a=factor(c(1,1,2,2,3,3) ), b=c(1,1, 10,10, 20,20) )

  a  b
1 1  1
2 1  1
3 2 10
4 2 10
5 3 20
6 3 20

我想按列a拆分数据框,计算每组中的b / sum(b),并将结果放在c列中 . 有了plyr,我可以这样做:

fun <- function(x){
  x$c=x$b/sum(x$b)
  x
} 
ddply(df, .(a), fun )

并有

a  b   c
1 1  1 0.5
2 1  1 0.5
3 2 10 0.5
4 2 10 0.5
5 3 20 0.5
6 3 20 0.5

但我怎么能用dplyr做呢?

df %.% group_by(a) %.% do(fun)

返回列表而不是data.frame .

2 回答

  • 2
    df %>%
      group_by(a) %>%
      mutate(c=b/sum(b))
    
      a  b   c
    1 1  1 0.5
    2 1  1 0.5
    3 2 10 0.5
    4 2 10 0.5
    5 3 20 0.5
    6 3 20 0.5
    
  • 5

    只需提及一个R基本解决方案,您可以使用 transform (R base等效于 mutate )和 ave 函数来分割矢量和应用函数 .

    > transform(df, c=ave(b,a, FUN= function(b) b/sum(b)))
      a  b   c
    1 1  1 0.5
    2 1  1 0.5
    3 2 10 0.5
    4 2 10 0.5
    5 3 20 0.5
    6 3 20 0.5
    

相关问题