排除零后对主题分组的数据进行平均

时间:2016-12-03 16:49:58

标签: r

我在R中有一个包含来自多个科目(DF)的数据的数据框。它看起来如下:

(DF):

ID       CSF1PO  CSF1PO.1  D10S1248  D10S1248.1  D12S391  D12S391.1
203078   0       -9        15          15        18       20
203078   -9      -9        14          15        17       19
203079   10      11        14          16        -9       -9
203079   0       12        14          17        -9       -9
203080   10      12        13          13        -9       -9
203080   10      11        14          16        -9       -9
203081   0       12        14          16        -9       -9
203081   11      12        15          16        -9       -9
203082   0       11        13          15        -9       -9
203082   0       11        13          14        -9       -9  

在排除零之后,我需要根据CSF1POID中的值进行平均。

我尝试使用以下内容首先用NA替换零

DF$CSF1P0[DF$CSF1P0==0]<-NA

然后使用group_by并按以下方式表示:

library(dplyr)
grouped<-group_by(DF, id)
averages<-summarize(grouped, avg=mean(CSF1P0), NA.arm=TRUE)

然而,我得到的结果是包含所有主题的平均值的单个值,其中排除了零,而不是ID的平均值 - 排除了零的分组块。 group_by似乎无法正常运行。

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:1)

两种略有不同的方法:

library(dplyr)
dd %>% mutate(CSF1PO=replace(CSF1PO,CSF1PO==0,NA)) %>%
   group_by(ID) %>% summarise(avg=mean(CSF1PO,na.rm=TRUE))

(这为ID = 203082提供NaN,因为没有非NA值或

dd %>% filter(CSF1PO!=0) %>%
    group_by(ID) %>% summarise(avg=mean(CSF1PO))

(这不包括ID = 203082)