2016-07-14 123 views
0

我有下面的d2数据框,我想添加一个列,它是按组和标志x的平均值。但是我在mutate代码中添加了flag列,我不知道如何通过组AND标志添加平均值。使用mutate添加列dplyr然后求平均值

d = data.frame(x=c(seq(1,5,1),seq(11,15,1),100,1000),group= c(rep("A",5),rep("B",5),"A","B")) 
    d 
    d2 = d%>% 
     group_by(group) %>% 
     mutate( 
        U=quantile(x, 0.75) + 1.5*IQR(x), 
        L=quantile(x, 0.25) - 1.5*IQR(x), 
        flag = ifelse(x>U | x<L,1,0), 
        mu = mean(x) 
        ) 
    as.data.frame(d2) 

我已经加入了对结果应该是什么

 x group U L flag  mu result 
1  1  A 8.5 -1.5 0 19.16667  3 
2  2  A 8.5 -1.5 0 19.16667  3 
3  3  A 8.5 -1.5 0 19.16667  3 
4  4  A 8.5 -1.5 0 19.16667  3 
5  5  A 8.5 -1.5 0 19.16667  3 
6 11  B 18.5 8.5 0 177.50000  13 
7 12  B 18.5 8.5 0 177.50000  13 
8 13  B 18.5 8.5 0 177.50000  13 
9 14  B 18.5 8.5 0 177.50000  13 
10 15  B 18.5 8.5 0 177.50000  13 
11 100  A 8.5 -1.5 1 19.16667 100 
12 1000  B 18.5 8.5 1 177.50000 1000 


note having  group_by(group,flag) 

returns 

Error: unknown variable to group by : flag 
+1

我不确定我关注。根据你的'ifelse()',只有'flag == 1',否则'0',你想要的意思是?这并不反映你上面的'结果'栏。我认为你正在寻找的仅仅是添加到你的第一个代码'...%>%group_by(group,flag)%>%mutate(result = mean(x))' –

+0

我觉得我很困惑。我正在查找结果向量中的结果。看看它如何按组和标志返回平均值。具有group_by(组,标志)返回和错误,因为标志尚未计算 – user3022875

回答

2

一个 “结果” 矢量只要你最初的操作后,添加group_by(group, flag)到链,然后mutate()

d %>% 
    group_by(group) %>% 
    mutate( 
    U = quantile(x, 0.75) + 1.5 * IQR(x), 
    L = quantile(x, 0.25) - 1.5 * IQR(x), 
    flag = ifelse(x > U | x < L, 1, 0), 
    mu = mean(x)) %>% 
    group_by(group, flag) %>% 
    mutate(result = mean(x)) 

其中给出:

#Source: local data frame [12 x 7] 
#Groups: group, flag [4] 
# 
#  x group  U  L flag  mu result 
# <dbl> <fctr> <dbl> <dbl> <dbl>  <dbl> <dbl> 
#1  1  A 8.5 -1.5  0 19.16667  3 
#2  2  A 8.5 -1.5  0 19.16667  3 
#3  3  A 8.5 -1.5  0 19.16667  3 
#4  4  A 8.5 -1.5  0 19.16667  3 
#5  5  A 8.5 -1.5  0 19.16667  3 
#6  11  B 18.5 8.5  0 177.50000  13 
#7  12  B 18.5 8.5  0 177.50000  13 
#8  13  B 18.5 8.5  0 177.50000  13 
#9  14  B 18.5 8.5  0 177.50000  13 
#10 15  B 18.5 8.5  0 177.50000  13 
#11 100  A 8.5 -1.5  1 19.16667 100 
#12 1000  B 18.5 8.5  1 177.50000 1000