R 排除零后平均主题分组数据帧

R 排除零后平均主题分组数据帧,r,R,我在R中有一个数据框,包含来自多个主题(DF)的数据。如下所示: (DF): 排除零后,我需要对CSF1PO中的值进行平均,并根据ID进行分组 我尝试首先使用NA替换零: DF$CSF1P0[DF$CSF1P0==0]<-NA 然而,我得到的结果是一个包含所有受试者的平均值(不包括零),而不是ID分组块(不包括零)的平均值。分组依据似乎工作不正常 任何帮助都将不胜感激 有两种稍微不同的方法: library(dplyr) dd %>% mutate(CSF1PO=replace(C

我在R中有一个数据框,包含来自多个主题(DF)的数据。如下所示:

(DF):

排除零后,我需要对
CSF1PO
中的值进行平均,并根据
ID
进行分组

我尝试首先使用
NA
替换零:

DF$CSF1P0[DF$CSF1P0==0]<-NA
然而,我得到的结果是一个包含所有受试者的平均值(不包括零),而不是
ID
分组块(不包括零)的平均值。
分组依据
似乎工作不正常


任何帮助都将不胜感激

有两种稍微不同的方法:

library(dplyr)
dd %>% mutate(CSF1PO=replace(CSF1PO,CSF1PO==0,NA)) %>%
   group_by(ID) %>% summarise(avg=mean(CSF1PO,na.rm=TRUE))
(这为ID=203082提供了
NaN
,因为没有非
NA
值)或


(这不包括ID=203082)

na.rm=TRUE
应在
内)
平均值(CSF1P0,na.rm=TRUE)
。此外,您不需要转换为NA,
DF%>%groupby(ID)%%>%summary(平均值(CSF1PO[CSF1PO!=0])
此外,您可以使用
filter
先删除
0
的行(即
filter(CSF1P0!=0)
),然后分组并汇总。
library(dplyr)
grouped<-group_by(DF, id)
averages<-summarize(grouped, avg=mean(CSF1P0), NA.arm=TRUE)
library(dplyr)
dd %>% mutate(CSF1PO=replace(CSF1PO,CSF1PO==0,NA)) %>%
   group_by(ID) %>% summarise(avg=mean(CSF1PO,na.rm=TRUE))
dd %>% filter(CSF1PO!=0) %>%
    group_by(ID) %>% summarise(avg=mean(CSF1PO))