2017-01-20 9 views
0

私は日が各IDの最大tnの中央にある「day_cent」変数を作成しようとしています。私は次のコードを書いていますが、 "day_centtn"には一見無作為なNAsが多数あり、そのギャップを埋める方法が分かりません。突然変異の値が欠けています

df <- df %>% group_by(id) %>% 
mutate(day_centtn = day - day[tn == max]) 

私が最初にどこの列を追加します

p <- ggplot(df, aes(x=day_centtn, y=tn_frac, group=id)) 
p + geom_line(aes(colour=id)) + geom_point() + 
xlim(-5,5) + geom_vline(xintercept = 0) + ylim(0,100)) 

id day tn max day_centtn tn_frac 
1 0 NA 32 NA NA 
1 1 32 32 0 100 
1 2 27 32 NA 84.375 
1 3 13 32 NA 40.625 
1 4 NA 32 NA NA 
1 5 9 32 NA 28.125 
1 6 NA 32 NA NA 
1 7 9 32 NA 28.125 
1 8 NA 32 NA NA 
1 9 NA 32 8 NA 
1 10 NA 32 NA NA 
1 180 NA 32 NA NA 
2 0 NA 9 NA NA 
2 1 NA 9 NA NA 
2 2 NA 9 NA NA 
2 3 8 9 NA 88.8888889 
2 4 6 9 -5 66.6666667 
2 5 7 9 NA 77.7777778 
2 6 7 9 NA 77.7777778 
2 7 7 9 NA 77.7777778 
2 8 NA 9 NA NA 
2 9 9 9 NA 100 
2 10 7 9 1 77.7777778 
3 0 14 1935-2 0.7235142 
3 1 11671935NA 60.3100775 
3 2 193519350 100 
3 3 10391935NA 53.6950904 
3 4 308 19352 15.9173127 
3 5 112 1935NA 5.7881137 
3 6 103 19354 5.3229974 
3 7 76 1935NA 3.9276486 
3 8 65 19356 3.3591731 
3 9 48 1935NA 2.4806202 
3 10 27 19358 1.3953488 

多くのおかげで、アンヌマリー

+0

[再現可能な例](http://stackoverflow.com/questions/5963269)の情報をお読みください。これは他の人があなたを助けることをはるかに容易にします。 – Axeman

+0

@Axeman私はうまくいけば、これを改善した、リンクのおかげで。 – Annemarie

答えて

1

私の目的は、day_centtn対TNをプロットすることであろうが、現時点では、これは空白のグリッドが表示されますtnがmaxと等しいかどうかを評価します。この評価関数では、tnでNAの値を扱うことができます。値をNAと比較するとNA(NA == 32はNAを返します)が返されるため、これは重要です。以下のような

何か:IDグループのmaxに等しい複数のTN値がある場合

df %>% 
mutate(is_max = ifelse(! is.na(tn), tn == max, FALSE) %>% 
group_by(id) %>% 
mutate(day_centtn = day - day[is_max]) 

ただし、このコードにバグがあるでしょう。 これが起こった場合(これはテストしていませんが)機能する可能性があります。

mutate(day_centtn = day - day[is_max][1]) 
+0

ありがとうございます。トロポニンの欠損値だと思うのですが、それは問題ではありません(レコード3を使用したときにうまくいきました)。私はあなたのコードを動作させることができません - それはエラーをeval(substr(expr)、envir、enclos)で文句を言う: 'group_by_'の適用可能なメソッドは、 "論理"クラスのオブジェクトに適用されません – Annemarie

+0

私はやった!私は、tn = max tnではなく、day = max dayを使用しました。ありがとうございました – Annemarie

関連する問題