R语言 多次使用筛选器进行平均值计算

1l5u6lss  于 2022-12-06  发布在  其他
关注(0)|答案(2)|浏览(171)

我需要多次使用filter函数(或者其他一些替代方法)来根据指定的条件计算平均值。
数据集如下:

df <- data.frame(id = c(1,2,3,4,5,6,7), 
                 cond = c("Y", "Y", "N", "Y", "N", "Y", "N"), score = c(3,4,5,2,1,2,9))

我需要分别计算cond=Ycond=N的平均值,然后将此平均值列附加到原始数据集,如下所示:

id cond score  average
1  1    Y     3   2.75
2  2    Y     4   2.75
3  3    N     5   5
4  4    Y     2   2.75
5  5    N     1   5
6  6    Y     2   2.75
7  7    N     9   5
ttygqcqt

ttygqcqt1#

我们可能会做

library(data.table)
setDT(df)[, average := mean(score), by = cond]
  • 输出
> df
      id   cond score average
   <num> <char> <num>   <num>
1:     1      Y     3    2.75
2:     2      Y     4    2.75
3:     3      N     5    5.00
4:     4      Y     2    2.75
5:     5      N     1    5.00
6:     6      Y     2    2.75
7:     7      N     9    5.00

或与collapse

library(collapse)
df$average <- fmean(df$score, df$cond, TRA = 1)
ijnw1ujt

ijnw1ujt2#

下面是一个如何使用dplyr执行此操作的示例

library(dplyr)

df <- data.frame(cond = c(1,1,1,2,2,2,2), score = c(3,4,5,2,1,2,9))

df %>% 
  group_by(cond) %>% 
  mutate(average = mean(score, na.rm = TRUE))

# A tibble: 7 x 3
# Groups:   cond [2]
   cond score average
  <dbl> <dbl>   <dbl>
1     1     3     4  
2     1     4     4  
3     1     5     4  
4     2     2     3.5
5     2     1     3.5
6     2     2     3.5
7     2     9     3.5

相关问题