在R中按条件计算平均值

4

我想在 R 中通过引入特定的标准来计算样本均值。例如,我有这张表格,我只想计算阶段为 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

感谢您的提前帮助。
4个回答

4
使用dplyr
library(dplyr)

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

如果您是第一次使用 `dplyr`,以下是一些解释:
选取数据框 `df` 中满足 `stage` 等于 1 或 2 的行,然后对于每个 `group` 中的 `stage`,计算 `wage_accepted` 的平均值。

谢谢,这很有用。但是我的数据实际上非常大,上面只是一个例子。我想从一个包含50个答案的变量中选择25个答案。在这种情况下,(filter stage==1 | .... | stage == 25)会有点长。我该如何更有效地做到这一点? - rado
使用 filter(stage %in% 1:25) - dimitris_ps
它是定性的而不是定量的。答案例如“A”,“B”,“C”等等... - rado
1
是的,你理解得很好! - dimitris_ps

3
假设您拥有一个包含数据的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 

感谢@bgfriend0的建议。 - Gaurav Sharma

2

看看这个。虽然只是玩具示例,但data.table非常紧凑。显然,dplyr也很棒。


    library(data.table)

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

就速度而言,data.table 是一艘火箭船,你可以查一下。我将让你自己将其应用到你的问题上。最好的祝福,M2K


0

您可以这样做,然后根据您的要求筛选阶段。

# 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))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接