计算加权平均值,同时排除以字符串为条件的某些行
Calculating a weighted average while excluding certain rows conditional on a string
我有一个矩阵,其中包含特定于每一行的值和 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 非常大(容易出错),这可能会有问题。有没有办法手动给出要排除的值?
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
我有一个矩阵,其中包含特定于每一行的值和 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 非常大(容易出错),这可能会有问题。有没有办法手动给出要排除的值?
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