我在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
在排除零之后,我需要根据CSF1PO
对ID
中的值进行平均。
我尝试使用以下内容首先用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
似乎无法正常运行。
任何帮助将不胜感激!
答案 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)