2016-11-21 36 views
1

私は各IDの非常に大きなデータセットの確率を1ヶ月間計算しようとしていますが、私はここでフォーラムで "mutate function"私が望むように働く。私はIDと月をサブセット化して、単に($月DF)1 /長さを使用していた私の臨床試験のための私のデータはそれに似ていますし、私は列Pを計算したい。:mutate r条件付きdata.frame with filter

ID Month Day  E P 
1 200701 20070101 .3 .333 
1 200701 20070102 .5 .333 
1 200701 20070105 .5 .333 
1 200702 20070106 .6 1 
2 200701 20070101 .4 .5 
2 200701 20070103 .3 .5 

u <- subset(df, !duplicated(df$ID)) 
s <- subset(df, !duplicated(df$Month)) #Month is defined as date variable 

、その後、それに類似したformularでそれらを変異: 私の考えは今、すべてのIDを抽出するためだった

mutate(df, p = 1/length(df$ID == u & df$month ==s)) 

これは残念ながら動作しません。

またはループを実行する必要がありますか?

+0

あなたの出力を表示してください。 – nicola

+2

この 'df%>%group_by(ID、Month)%>%mutate(P = 1/n())' – Sotos

+1

'df $ P < - のみを使って(df、1/ave (ID番号、ID、月、FUN =長さ)) ' – akrun

答えて

0

dplyrを使用してdata.table

library(data.table) 
setDT(dt)[, P := (1/.N) ,by = c("ID","Month")] 
# > dt 
# ID Month  Day E   P 
#1: 1 200701 20070101 0.3 0.3333333 
#2: 1 200701 20070102 0.5 0.3333333 
#3: 1 200701 20070105 0.5 0.3333333 
#4: 1 200702 20070106 0.6 1.0000000 
#5: 2 200701 20070101 0.4 0.5000000 
#6: 2 200701 20070103 0.3 0.5000000 

を使用して:@Sotosもこの答えを書いています。彼が最初に書きました

library(dplyr) 
dt %>% 
    group_by(ID,Month) %>% 
    mutate(1/n()) 

#  ID Month  Day  E  1/n() 
# (int) (int) (int) (dbl)  (dbl) 
#1  1 200701 20070101 0.3 0.3333333 
#2  1 200701 20070102 0.5 0.3333333 
#3  1 200701 20070105 0.5 0.3333333 
#4  1 200702 20070106 0.6 1.0000000 
#5  2 200701 20070101 0.4 0.5000000 
#6  2 200701 20070103 0.3 0.5000000 
+0

@Sotos私は保証したいと思いますあなたはこれを最初に書きましたが、私もこれを念頭に置いていました...私は真剣にコピーしませんでした。実際には私はここで昨日それを学びます。 –

+1

心配しないでください。私はあなたを信じています:) – Sotos

+0

ありがとうSotosとジョエル! – Max