繁体   English   中英

通过R中的条件计算平均值

[英]calculate a mean by criteria in R

我想通过引入特定标准来计算R中的样本均值。 例如,我有此表,并且我只想要stage = 1或2的那些人的均值:

treatment session period stage wage_accepted type 
1            1      1     1            25  low 
1            1      1     3            19  low 
1            1      1     3            15  low 
1            1      1     2            32 high 
1            1      1     2            13  low 
1            1      1     2            14  low 
1            1      2     1            17  low 
1            1      2     4            16  low
1            1      2     5            21  low

在这种情况下,理想的输出应该是:

   stage  mean
      1  21.0 
      2  19.6667

提前致谢。

使用dplyr

library(dplyr)

df %>% filter(stage==1 | stage ==2) %>% group_by(stage) %>%
  summarise(mean=mean(wage_accepted))

如果您是dplyr ,请进行以下说明:

取数据帧df然后filter stage等于1或2的位置。然后对于stage每个group ,计算所接受的wage_acceptedmean

假设您有一个用于数据的csv文件,则可以使用以下方法将数据读入数据框:

data<-read.csv("PATH_TO_YOUR_CSV_FILE/Name_of_the_CSV_File.csv")

然后,您可以使用依赖sapply()以下代码:

sapply(split(data$Wage_Accepted,data$Stage),mean)

   1        2        3        4        5 
21.00000 19.66667 17.00000 16.00000 21.00000 

或者这段代码依赖于tapply()

tapply(data$Wage_Accepted,data$Stage,mean)

   1        2        3        4        5 
21.00000 19.66667 17.00000 16.00000 21.00000 

看一下这个。 这是一个玩具示例,但是data.table是如此紧凑。 显然,dplyr也很棒。


    library(data.table)

    dat <- data.table(iris)
    dat[Species == "setosa" | Species == "virginica", mean(Sepal.Width), by = Species]

根据您对速度的需求,data.table是一艘火箭飞船。 我将它留给您,以将其应用于您的问题。 最好,M2K

您可以执行此操作,然后根据需要过滤舞台

# Calculating mean with respect to stages
df = do.call(rbind, lapply(split(data, f = data$stage),function(x) out = data.frame(stage = unique(x$stage), mean = mean(x$wage_accepted))))

# mean for stage 1 and 2
required = subset(df, stage %in% c(1,2))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM