2017-02-21 3 views
2

データ操作の問題があります。基本的に私は次のように、2倍の列と応答変数を持つデータフレームを持っている:私は達成したい何dplyrを使用して行のセットとターゲット行の差を計算するにはどうすればよいですか?

set.seed(1234) 
df <- data.frame(ID = rep(1:10,each=4), 
       Condition = factor(rep(c("A","B","C","D"),10)), 
        Resp = runif(40,0,1)) 

はIDごとに、Respの違いが含まれ、新しい列Resp_newを作成することです変数ConditionのレベルAと残りのレベルBとの間、CおよびDの間にある。

dplyrでこの問題を解決したいと思っています。これはデータ操作のための私の主なツールですが、どんな助けでも高く評価されます。

答えて

4

例のようにデータセットを並べ替えた場合、これはベースRでaveと簡単に実行できます。

df$respNew <- ave(df$Resp, df$ID, FUN=function(i) i - i[1]) 

aveの最初の引数は、第二のグループ化変数であり、操作するためのベクターです。 3番目は操作に使用する関数です。これは、単に最初の要素(ID == A)とベクトルグループのすべての要素の違いです。それでもこの優れた答え:)の後にdplyrをしたい場合は

最初の6行は

head(df) 
    ID Condition  Resp respNew 
1 1   A 0.1137034 0.0000000 
2 1   B 0.6222994 0.5085960 
3 1   C 0.6092747 0.4955713 
4 1   D 0.6233794 0.5096760 
5 2   A 0.8609154 0.0000000 
6 2   B 0.6403106 -0.2206048 
+0

を返します。 'df $ respNew < - df $ df%>%mutate(respNew = ave(Resp、ID、FUN = function(i)i-i [1])) – thisisrg

+1

@thisisrg Resp - ave(df $ Resp、df $ ID、FUN = dplyr :: first) ' – Frank

関連する問題