R:通过因子 dplyr 计算矩阵汇总统计
R: Calculating matrix summary statistics by factor dplyr
计算具有因子的矩阵汇总统计的最佳方法是什么(使用 R)?
示例数据:
df <- read.table(text="
Gender Obs1 Obs2 Obs3
1 F 0.0 -1.25 -1.23
2 M -0.5 0.83 -0.25
3 UNK 1.0 1.22 0.24
4 F 1.0 0.25 0.76
5 F 0.5 1.02 0.0
6 M 2.0 -0.05 0.66
7 M 1.0 5.80 NA
8 M 1.0 NA 1.0
9 UNK 0.0 NA 2.2", header=T)
df <- as.data.frame(df)
预期输出:
Gender | Obs1_count | Obs2_count | Obs3_count | Obs1_mean | Obs2_mean | Obs3_mean
---------------------------------------------------------------------------------
F 3 3 3 0.5 0.00667 -0.157
M 4 3 3 0.875 2.0433 0.47
UNK 2 1 2 0.5 1.22 1.22
我尝试过的:
library(dplyr)
summaryStats <- df %>% group_by(Gender) %>% na.omit() %>%
summarise_all(.funs = funs(
count = length(.),
mean = mean(.)))
我们可以在逻辑向量上使用 sum
来获得非 NA 元素的 'count',mean
也有一个参数 na.rm = TRUE
来删除那些 NA元素。所以,我们不需要 na.omit()
。虽然它确实删除了 NA
元素,但只要该行上只有一个 NA
,它也会删除完整的行。实际上,某些列的 'count' 会减少,并且 'mean' 也会根据删除具有非 NA 值的行而发生变化
df %>%
group_by(Gender) %>%
summarise_all(.funs = funs(count = sum(!is.na(.)),
mean = mean(., na.rm = TRUE)))
# A tibble: 3 x 7
# Gender Obs1_count Obs2_count Obs3_count Obs1_mean Obs2_mean Obs3_mean
# <fct> <int> <int> <int> <dbl> <dbl> <dbl>
#1 F 3 3 3 0.5 0.00667 -0.157
#2 M 4 3 3 0.875 2.19 0.47
#3 UNK 2 1 2 0.5 1.22 1.22
计算具有因子的矩阵汇总统计的最佳方法是什么(使用 R)?
示例数据:
df <- read.table(text="
Gender Obs1 Obs2 Obs3
1 F 0.0 -1.25 -1.23
2 M -0.5 0.83 -0.25
3 UNK 1.0 1.22 0.24
4 F 1.0 0.25 0.76
5 F 0.5 1.02 0.0
6 M 2.0 -0.05 0.66
7 M 1.0 5.80 NA
8 M 1.0 NA 1.0
9 UNK 0.0 NA 2.2", header=T)
df <- as.data.frame(df)
预期输出:
Gender | Obs1_count | Obs2_count | Obs3_count | Obs1_mean | Obs2_mean | Obs3_mean
---------------------------------------------------------------------------------
F 3 3 3 0.5 0.00667 -0.157
M 4 3 3 0.875 2.0433 0.47
UNK 2 1 2 0.5 1.22 1.22
我尝试过的:
library(dplyr)
summaryStats <- df %>% group_by(Gender) %>% na.omit() %>%
summarise_all(.funs = funs(
count = length(.),
mean = mean(.)))
我们可以在逻辑向量上使用 sum
来获得非 NA 元素的 'count',mean
也有一个参数 na.rm = TRUE
来删除那些 NA元素。所以,我们不需要 na.omit()
。虽然它确实删除了 NA
元素,但只要该行上只有一个 NA
,它也会删除完整的行。实际上,某些列的 'count' 会减少,并且 'mean' 也会根据删除具有非 NA 值的行而发生变化
df %>%
group_by(Gender) %>%
summarise_all(.funs = funs(count = sum(!is.na(.)),
mean = mean(., na.rm = TRUE)))
# A tibble: 3 x 7
# Gender Obs1_count Obs2_count Obs3_count Obs1_mean Obs2_mean Obs3_mean
# <fct> <int> <int> <int> <dbl> <dbl> <dbl>
#1 F 3 3 3 0.5 0.00667 -0.157
#2 M 4 3 3 0.875 2.19 0.47
#3 UNK 2 1 2 0.5 1.22 1.22