65

次のようなデータフレームがあります。

#df
ID  DRUG FED  AUC0t  Tmax   Cmax
1    1     0   100     5      20
2    1     1   200     6      25
3    0     1   NA      2      30 
4    0     0   150     6      65

アンズなど。DRUGAUC、Tmax、および Cmax に関する統計を、薬物および FED STATUSごとにまとめたいと思いFEDます。私はdplyrを使用しています。例: AUC の場合:

CI90lo <- function(x) quantile(x, probs=0.05, na.rm=TRUE)
CI90hi <- function(x) quantile(x, probs=0.95, na.rm=TRUE)  

summary <- df %>%
             group_by(DRUG,FED) %>%
             summarize(mean=mean(AUC0t, na.rm=TRUE), 
                                 low = CI90lo(AUC0t), 
                                 high= CI90hi(AUC0t),
                                 min=min(AUC0t, na.rm=TRUE),
                                 max=max(AUC0t,na.rm=TRUE), 
                                 sd= sd(AUC0t, na.rm=TRUE))

ただし、出力は DRUG および FED によってグループ化されません。これは、DRUG および FED でファセットされていないすべての統計を含む 1 行のみを示します。

理由はありますか?どうすれば正しいことをさせることができますか?

4

5 に答える 5

176

dplyrの後にplyrをロードしたと思います。そのため、グループ化された要約ではなく全体的な要約が得られます。

これは、最後にロードされたplyrで起こることです。

library(dplyr)
library(plyr)
df %>%
      group_by(DRUG,FED) %>%
      summarize(mean=mean(AUC0t, na.rm=TRUE), 
                low = CI90lo(AUC0t), 
                 high= CI90hi(AUC0t),
                 min=min(AUC0t, na.rm=TRUE),
                 max=max(AUC0t,na.rm=TRUE), 
                 sd= sd(AUC0t, na.rm=TRUE))

  mean low high min max sd
1  150 105  195 100 200 50

ここでplyrを削除して再試行すると、グループ化された要約が得られます。

detach(package:plyr)
df %>%
      group_by(DRUG,FED) %>%
      summarize(mean=mean(AUC0t, na.rm=TRUE), 
                low = CI90lo(AUC0t), 
                 high= CI90hi(AUC0t),
                 min=min(AUC0t, na.rm=TRUE),
                 max=max(AUC0t,na.rm=TRUE), 
                 sd= sd(AUC0t, na.rm=TRUE))

Source: local data frame [4 x 8]
Groups: DRUG

  DRUG FED mean low high min max  sd
1    0   0  150 150  150 150 150 NaN
2    0   1  NaN  NA   NA  NA  NA NaN
3    1   0  100 100  100 100 100 NaN
4    1   1  200 200  200 200 200 NaN
于 2014-11-14T15:15:39.410 に答える
4

dplyr に加えて、ユーザーはggplotggpubr関数をよく使用します。実際、これはdplyrとの非互換性がいくつかある別の一般的に使用されるパッケージです。同様に、上記のようにdplyr::packageを使用することもできますが、それでもうまくいかない場合は、私に起こったように、ライブラリをデタッチするだけで十分です.

detach("package:ggpubr", unload = TRUE)

df %>%
  dplyr::group_by(DRUG,FED) %>%
  dplyr::summarize(mean=mean(AUC0t, na.rm=TRUE), 
            low = CI90lo(AUC0t), 
             high= CI90hi(AUC0t),
             min=min(AUC0t, na.rm=TRUE),
             max=max(AUC0t,na.rm=TRUE), 
             sd= sd(AUC0t, na.rm=TRUE))
于 2021-04-20T14:11:20.103 に答える
1

データをグループ化するための最良の方法であり、習得が容易な sqldf を試してください。以下は、必要に応じた例です。すべての種類のデータ サンプル グループ化 sqldf ライブラリは非常に役立ちます。

install.packages("sqldf")
library(sqldf)
dat1 <- sqldf("select x,y,
            y/sum(y) as Z
            from dat
            group by x")
于 2019-08-21T07:47:32.513 に答える