如何计算 10 个区间内值的标准差?
how to calculate standard deviation of values in 10 intervals?
我想在 R 中以 10 为步长计算标准偏差;例如
对于大量的值,我想计算 10 个区间内的值的 SD。 0-10、10-20、20-30 ...
示例:我有一个向量:
exemple <- seq (0,100,10)
如果我做 sd(示例):我有标准偏差的值,但对于示例中的所有值。
但是,我该如何计算此示例的标准偏差,选择 10 步 10 步?
但是我不想计算所有这些值的标准差,而是想计算它在 0 到 10 之间、10 到 20 之间、20 到 30 之间等等……
我在 0-10 区间内精确:我们有值,在 10-20 区间内,我们也有值..等等
exemple2 0 to 10, we have values : 0.2, 0.3, 0.5, 0.7, 0.6, 0.7, 0.03, 0.09, 0.1, 0.05
更多插图的图像:
有人可以帮我吗?
您可以使用cut
/findInterval
将数据分组,每组取sd
。
set.seed(123)
vec <- runif(100, max = 100)
tapply(vec, cut(vec, seq(0,100,10)), sd)
# (0,10] (10,20] (20,30] (30,40] (40,50] (50,60] (60,70] (70,80] (80,90] (90,100]
#3.438162 2.653866 2.876299 2.593230 2.353325 2.755474 2.454519 3.282779 3.658064 3.021508
这是一个使用 dplyr 的解决方案:
library(dplyr)
## Create a random a dataframe with a random variable with 1000 values between 1 and 100
df <- data.frame(x = runif(1000, 1, 100)
## Create a grouping variables, binning by 10
df$group <- findInterval(df$x, seq(10, 100, by=10))
## Calculate SD by group
df %>%
group_by(group) %>%
summarise(Std.dev = sd(x))
# A tibble: 10 x 2
group St.dev
* <int> <dbl>
1 0 2.58
2 1 2.88
3 2 2.90
4 3 2.71
5 4 2.84
6 5 2.90
7 6 2.88
8 7 2.68
9 8 2.98
10 9 2.89
我想在 R 中以 10 为步长计算标准偏差;例如
对于大量的值,我想计算 10 个区间内的值的 SD。 0-10、10-20、20-30 ...
示例:我有一个向量:
exemple <- seq (0,100,10)
如果我做 sd(示例):我有标准偏差的值,但对于示例中的所有值。
但是,我该如何计算此示例的标准偏差,选择 10 步 10 步?
但是我不想计算所有这些值的标准差,而是想计算它在 0 到 10 之间、10 到 20 之间、20 到 30 之间等等……
我在 0-10 区间内精确:我们有值,在 10-20 区间内,我们也有值..等等
exemple2 0 to 10, we have values : 0.2, 0.3, 0.5, 0.7, 0.6, 0.7, 0.03, 0.09, 0.1, 0.05
更多插图的图像:
有人可以帮我吗?
您可以使用cut
/findInterval
将数据分组,每组取sd
。
set.seed(123)
vec <- runif(100, max = 100)
tapply(vec, cut(vec, seq(0,100,10)), sd)
# (0,10] (10,20] (20,30] (30,40] (40,50] (50,60] (60,70] (70,80] (80,90] (90,100]
#3.438162 2.653866 2.876299 2.593230 2.353325 2.755474 2.454519 3.282779 3.658064 3.021508
这是一个使用 dplyr 的解决方案:
library(dplyr)
## Create a random a dataframe with a random variable with 1000 values between 1 and 100
df <- data.frame(x = runif(1000, 1, 100)
## Create a grouping variables, binning by 10
df$group <- findInterval(df$x, seq(10, 100, by=10))
## Calculate SD by group
df %>%
group_by(group) %>%
summarise(Std.dev = sd(x))
# A tibble: 10 x 2
group St.dev
* <int> <dbl>
1 0 2.58
2 1 2.88
3 2 2.90
4 3 2.71
5 4 2.84
6 5 2.90
7 6 2.88
8 7 2.68
9 8 2.98
10 9 2.89