2016-05-20 6 views
0

dplyrに問題があります。解決できません。また、問題は完全なデータセット(私はあなたと共有できません)でのみ発生するので、私は完全に実行可能な例はありません。R dplyr:min max関数が突然変異していない

私は、次の操作を行います。

id   minbplevel maxbplevel 
(dbl)  (dbl)  (dbl) 
1 B   33.0  73.0 
2 A   39.4  80.4 

につながる。しかし、私は

t %>% group_by(id, add=TRUE) %>% 
mutate(minbplevel = min(ref, na.rm=T) 
     ,maxbplevel = max(ref, na.rm=T) 
     ) %>% filter(id %in% c(caseA,caseB)) 

を行うときには、その結果

t %>% group_by(id, add=TRUE) %>% 
    summarise(minbplevel = min(ref, na.rm=T) 
     ,maxbplevel = max(ref, na.rm=T) 
     ) %>% filter(id %in% c(caseA,caseB)) 

id Level refparmax refparmin ref meanbptest minbplevel maxbplevel 
(dbl) (chr)  (int)  (int) (dbl)  (dbl)  (dbl)  (dbl) 
1 B   0SD  69  68 49.0 52.00000   33   73 
2 B  min1SD  69  68 41.0 52.00000   33   73 
3 B  min2SD  69  68 33.0 52.00000   33   73 
4 B  plus1SD  69  68 59.0 52.00000   33   73 
5 B  plus2SD  69  68 73.0 52.00000   33   73 
6 A   0SD  100  95 56.4 35.33333   NA   NA 
7 A  min1SD  100  95 47.4 35.33333   NA   NA 
8 A  min2SD  100  95 39.4 35.33333   NA   NA 
9 A  plus1SD  100  95 67.4 35.33333   NA   NA 
10 A  plus2SD  100  95 80.4 35.33333   NA   NA 

NAがAのケースで製作された理由は何ですか?データのサブセットで試すたびに、データの2番目のケースが問題になると思われますが、これはちょうど奇抜です。 この問題を引き起こすのは18850の1つのケースだけですが、問題のケースが残りのものと異なるように識別できるものはありません。

私はこれを解決するために何をすることができますアドバイスをしてください? 私は回避策を考え、集計したデータを作成し、その結果を元のデータとマージすることができます。しかし、私はdplyrが私にこれを一つのステップで行うことができると思った。

add = TRUEオプションを削除または追加しようとしました。それは何の違いもありません。

多分私は間違った方法でこれを使用しています。コメントに基づいて


私が試した:私は、データの一部をマスクする必要が

 id ref 
4 B 33.0 
5 A 39.4 

になり

subset(with(t,aggregate(ref~id, t, FUN= min, na.rm=TRUE, na.action= na.pass)),id %in% c(caseA,caseB)) 

を。

dput(head(subset(t,id %in% c(caseA,caseB)) , 12)) 

が与える:

を再び私は、変数caseBとcaseAと実際のidを置き換えます。また、これは問題が発生する完全なデータセットでもありません。

structure(list(id = c(caseB, caseB, caseB, caseB, caseB, 
caseA, caseA, caseA, caseA, caseA), Level = c("0SD", "min1SD", 
"min2SD", "plus1SD", "plus2SD", "0SD", "min1SD", "min2SD", "plus1SD", 
"plus2SD"), refparmax = c(69L, 69L, 69L, 69L, 69L, 100L, 100L, 
100L, 100L, 100L), refparmin = c(68L, 68L, 68L, 68L, 68L, 95L, 
95L, 95L, 95L, 95L), ref = c(49, 41, 33, 59, 73, 56.4, 47.4, 
39.4, 67.4, 80.4), meanbptest = c(52, 52, 52, 52, 52, 35.3333333333333, 
35.3333333333333, 35.3333333333333, 35.3333333333333, 35.3333333333333 
)), .Names = c("id", "Level", "refparmax", "refparmin", "ref", 
"meanbptest"), class = c("grouped_df", "tbl_df", "tbl", "data.frame" 
), row.names = c(NA, -10L), vars = list(id), drop = TRUE, indices = list(
    0:4, 5:9), group_sizes = c(5L, 5L), biggest_group_size = 5L, labels = structure(list(
    id = c(caseB, caseA)), class = "data.frame", row.names = c(NA, 
-2L), vars = list(id), drop = TRUE, .Names = "id")) 
+0

ベースRソリューションでそれを試して、それが 'dplyr' mutateに基づいているかどうかを確認できますか? 'aggregate(ref-id、t、FUN = min、na.rm = TRUE、na.action = na.pass) ' – akrun

+1

私は再現できません。 'caseA'と' caseB'の定義が不足しているため、いずれかのオプションを実行するとエラーになります。フィルタを削除すると、すべての値は 'mutate'の後に発生します。'dput(head(t、12))' –

+0

を使ってポストする必要があります。pkg:dplyrがロードされていても、引用符で囲まれていない 'caseA'と' caseB'のRチョークを編集します。この構造に至るまでの歩みを振り返るべきだと思います。 –

答えて

0

ref列のすべてのNAをゼロで置き換えると、突然変異のステップはうまくいきます。 Aosmithが示唆しているように、おそらくdplyrの開発版で修正されたmutateとNAの問題と関係しています。

ワークステーションの制限により、この提案をテストすることはできません。だから私は問題を回避し、NAの置き換えのステップで、要約のステップの後にゼロの値を処理します。

関連する問題