如何计算 R 中多个数据集的特定变量的方差
How to calculate the variance of specific variable across multiple datasets in R
我有 3 个数据集,每个数据集都有变量 time_tick
、gyr_X_value
、gyr_Y_value
和 gyr_Z_value
。
其中一个数据集的例子如下:
time_tick gyr_X_value gyr_Y_value gyr_Z_value
1 .01 .12 .24 -.28
2 .12 0 0 .05
3 .04 .10 0 .17
4 .03 0 -.25 .15
我知道我可以用 var()
计算每个单独数据集的方差,但是我如何计算所有三个数据集的 gyr_X_value
的方差?
我们可以将数据集放在 list
中,提取 'gyr_X_value' 列,如果我们需要找到每一行的方差,则使用 rowVars
library(matrixStats)
rowVars(sapply(list(df1, df2, df3), `[[`, 'gyr_X_value'))
假设,兴趣是为每个数据集找到特定列的方差,然后在提取列
后使用var
sapply(list(df1, df2, df3), function(x) var(x[['gyr_X_value']]))
注意:对象名称假定为 'df1'、'df2'、'df3'
您可以使用 rbind。给定数据框a、b、c,可以按行组合
combined <- rbind(a,b,c)
See here for detailed usage.。然后您可以像往常一样在给定列上使用 var(),例如 combined[ 2].
对于这类问题,我强烈推荐 tidyverse 方法。
您的数据:
df <- read.table(text = "time_tick gyr_X_value gyr_Y_value gyr_Z_value
1 .01 .12 .24 -.28
2 .12 0 0 .05
3 .04 .10 0 .17
4 .03 0 -.25 .15", header = TRUE)
计算:
library(tidyverse)
df %>% gather(variable, value, -time_tick) %>%
group_by(variable) %>%
summarize(variance = var(value))
## A tibble: 3 x 2
# variable variance
# <chr> <dbl>
#1 gyr_X_value 0.004100
#2 gyr_Y_value 0.040025
#3 gyr_Z_value 0.043425
解释:首先,gather 函数将宽数据框变成长数据框:
df %>% gather(variable, value, -time_tick)
# time_tick variable value
#1 0.01 gyr_X_value 0.12
#2 0.12 gyr_X_value 0.00
#3 0.04 gyr_X_value 0.10
#4 0.03 gyr_X_value 0.00
#5 0.01 gyr_Y_value 0.24
#6 0.12 gyr_Y_value 0.00
#7 0.04 gyr_Y_value 0.00
#8 0.03 gyr_Y_value -0.25
#9 0.01 gyr_Z_value -0.28
#10 0.12 gyr_Z_value 0.05
#11 0.04 gyr_Z_value 0.17
#12 0.03 gyr_Z_value 0.15
group_by()
函数然后通过 variable
设置分组,summarize()
函数在分组内分别计算方差。
我有 3 个数据集,每个数据集都有变量 time_tick
、gyr_X_value
、gyr_Y_value
和 gyr_Z_value
。
其中一个数据集的例子如下:
time_tick gyr_X_value gyr_Y_value gyr_Z_value
1 .01 .12 .24 -.28
2 .12 0 0 .05
3 .04 .10 0 .17
4 .03 0 -.25 .15
我知道我可以用 var()
计算每个单独数据集的方差,但是我如何计算所有三个数据集的 gyr_X_value
的方差?
我们可以将数据集放在 list
中,提取 'gyr_X_value' 列,如果我们需要找到每一行的方差,则使用 rowVars
library(matrixStats)
rowVars(sapply(list(df1, df2, df3), `[[`, 'gyr_X_value'))
假设,兴趣是为每个数据集找到特定列的方差,然后在提取列
后使用var
sapply(list(df1, df2, df3), function(x) var(x[['gyr_X_value']]))
注意:对象名称假定为 'df1'、'df2'、'df3'
您可以使用 rbind。给定数据框a、b、c,可以按行组合
combined <- rbind(a,b,c)
See here for detailed usage.。然后您可以像往常一样在给定列上使用 var(),例如 combined[ 2].
对于这类问题,我强烈推荐 tidyverse 方法。
您的数据:
df <- read.table(text = "time_tick gyr_X_value gyr_Y_value gyr_Z_value
1 .01 .12 .24 -.28
2 .12 0 0 .05
3 .04 .10 0 .17
4 .03 0 -.25 .15", header = TRUE)
计算:
library(tidyverse)
df %>% gather(variable, value, -time_tick) %>%
group_by(variable) %>%
summarize(variance = var(value))
## A tibble: 3 x 2
# variable variance
# <chr> <dbl>
#1 gyr_X_value 0.004100
#2 gyr_Y_value 0.040025
#3 gyr_Z_value 0.043425
解释:首先,gather 函数将宽数据框变成长数据框:
df %>% gather(variable, value, -time_tick)
# time_tick variable value
#1 0.01 gyr_X_value 0.12
#2 0.12 gyr_X_value 0.00
#3 0.04 gyr_X_value 0.10
#4 0.03 gyr_X_value 0.00
#5 0.01 gyr_Y_value 0.24
#6 0.12 gyr_Y_value 0.00
#7 0.04 gyr_Y_value 0.00
#8 0.03 gyr_Y_value -0.25
#9 0.01 gyr_Z_value -0.28
#10 0.12 gyr_Z_value 0.05
#11 0.04 gyr_Z_value 0.17
#12 0.03 gyr_Z_value 0.15
group_by()
函数然后通过 variable
设置分组,summarize()
函数在分组内分别计算方差。