首页 > 解决方案 > 计算加权平均值,同时排除以字符串为条件的某些行

问题描述

我有一个包含值和特定于每一行的 ID 的矩阵。我正在尝试计算这些值的简单平均值,但想根据其 ID 手动排除一些值。

假设我有以下矩阵:

library(stringi)

set.seed(20)

mat <- cbind.data.frame(id = stri_rand_strings(6, 3, pattern = "[A-Za-z0-9]") ,
             number = runif(6, min=0, max=100) )

给予

   id    number
1 slH 28.926236
2 Wxy 81.945649
3 54K 49.196770
4 Mik  3.025649
5 0kB 44.023153
6 SJ6  7.728510

意思是:mean(mat$number )给予35.80766

我想重复该计算,但能够手动选择要排除的变量。例如,如果我想排除:slH并且54K我可以尝试手动删除这些行:

mean(mat$number[-c(1 , 3)] ,)

但是如果要忽略的矩阵和 ID 非常大(容易出错),这可能会出现问题。有没有办法手动给出要排除的值?

标签: rmean

解决方案


library(stringi)
library(tidyverse)


set.seed(20)

df1 <- tibble(id = stri_rand_strings(6, 3, pattern = "[A-Za-z0-9]"),
              number = runif(6, min = 0, max = 100))
df1
#> # A tibble: 6 x 2
#>   id    number
#>   <chr>  <dbl>
#> 1 slH    28.9 
#> 2 Wxy    81.9 
#> 3 54K    49.2 
#> 4 Mik     3.03
#> 5 0kB    44.0 
#> 6 SJ6     7.73

df1 %>%
  filter(! id %in% c("slH", "54K")) %>%
  summarise(number = mean(number))
#> # A tibble: 1 x 1
#>   number
#>    <dbl>
#> 1   34.2

推荐阅读