2016-04-20 6 views
1

私はデータをグループ化してgrpindexとし、グループを参考にいくつかの簡単な計算を行います。グループの値から他のグループから変数valueを減算したいと思います。dplyrでのグループ間の操作

df <- data.frame(grp = rep(letters[1:3], each = 2), 
       index = rep(1:2, times = 3), 
       value = seq(10, 60, length.out = 6)) 

df 


## grp index value 
## 1 a  1 10 
## 2 a  2 20 
## 3 b  1 30 
## 4 b  2 40 
## 5 c  1 50 
## 6 c  2 60 

希望outpoutは次のように次のようになります。理想的には私はdplyrを使用して、それをしたいと思っ

group_by(df, grp, index) %>% 
    mutate(diff = value - value[grp == "a"]) 

## grp index value 
## 1 b  1 20 
## 2 b  2 20 
## 3 c  1 40 
## 4 c  2 40 

私の推測では、それがに近いものになりますです。

よろしく、フィリップ

答えて

1

私たちに「A」ではありませんし、その後mutate内の差異を行う「GRP」のfilter

df %>% 
    filter(grp!="a") %>% 
    mutate(value = value- df$value[df$grp=="a"]) 

それとも別のオプションは、予想通りjoin

df %>% 
    filter(grp!="a") %>% 
    left_join(., subset(df, grp=="a", select=-1), by = "index") %>% 
    mutate(value = value.x- value.y) %>% 
    select(1, 2, 5) 
# grp index value 
#1 b  1 20 
#2 b  2 20 
#3 c  1 40 
#4 c  2 40 
+1

作品だろう。ありがとうございました。 –

関連する問題