[英]How I can calculate multiple means and standard deviations for groups in R
我努力为 R 中的多个组计算多个均值和标准差。
这是我的数据:
df <- read.table(text="A1 B1 time1 A2 B2 time2 A3 B3 time3
m p 12 m p 11 n q 12
n q 12 m p 13 n q 14
n q 11 n p 14 m p 14
n q 10 n q 15 m p 12
m p 8 n q 12 m p 11
",h=T)
我想根据时间 1、时间 2 和时间 3 为组计算 A1、B1、A2、B2、A3、B3 的均值和 SD。感兴趣的输出是:
meanA1m x meanA2m x meanA3m x
meanA1n x meanA2n x meanA3n x
meanB1p x meanB2p x meanB3p x
meanB1q x meanB2q x meanB3q x
SDA1m x SDA2m x SDA3m x
SDA1n x STA2n x STA3n x
SDB1p x SDB2p x SDB3p x
SDB1q x SDB2q x SDB3q x
我一直在寻找解决方案,但我没有成功,或者我可能错过了一些东西。 这些数据有什么解决办法吗?
这是一种使用 development tidyr::pivot_longer
来重塑此数据的方法,它的格式非常混乱:
library(tidyverse)
df <- read.table(text = "A1 B1 time1 A2 B2 time2 A3 B3 time3
m p 12 m p 11 n q 12
n q 12 m p 13 n q 14
n q 11 n p 14 m p 14
n q 10 n q 15 m p 12
m p 8 n q 12 m p 11
", h = T, stringsAsFactors = FALSE)
spec <- tibble(
.name = colnames(df),
.value = str_extract(.name, ".*(?=\\d)") %>% recode(time = "value"),
time = str_extract(.name, "\\d")
)
df %>%
pivot_longer_spec(spec = spec) %>%
gather("AB", "AB_val", A, B) %>%
group_by(AB, time, AB_val) %>%
summarise(mean = mean(value), SD = sd(value))
#> # A tibble: 12 x 5
#> # Groups: AB, time [6]
#> AB time AB_val mean SD
#> <chr> <chr> <chr> <dbl> <dbl>
#> 1 A 1 m 10 2.83
#> 2 A 1 n 11 1
#> 3 A 2 m 12 1.41
#> 4 A 2 n 13.7 1.53
#> 5 A 3 m 12.3 1.53
#> 6 A 3 n 13 1.41
#> 7 B 1 p 10 2.83
#> 8 B 1 q 11 1
#> 9 B 2 p 12.7 1.53
#> 10 B 2 q 13.5 2.12
#> 11 B 3 p 12.3 1.53
#> 12 B 3 q 13 1.41
由reprex 包(v0.3.0) 于 2019 年 8 月 15 日创建
使用data.table
你可以获得类似于你想要的东西:
#Adding id column to df
df$id <- 1:nrow(df)
library(data.table)
setDT(df)
#Reshape df from wide to long
df2 <- melt(df, id = c("id", "time1", "time2", "time3"))
#Compute the required means and sd.
df2[, .(mean1 = mean(time1), sd1 = sd(time1),
mean2 = mean(time2), sd2 = sd(time2),
mean3 = mean(time3), sd3 = sd(time3)
),.(variable, value)]
#Returns
variable value mean1 sd1 mean2 sd2 mean3 sd3
1: A1 m 10.000000 2.8284271 11.50000 0.7071068 11.50000 0.7071068
2: A1 n 11.000000 1.0000000 14.00000 1.0000000 13.33333 1.1547005
3: B1 p 10.000000 2.8284271 11.50000 0.7071068 11.50000 0.7071068
4: B1 q 11.000000 1.0000000 14.00000 1.0000000 13.33333 1.1547005
5: A2 m 12.000000 0.0000000 12.00000 1.4142136 13.00000 1.4142136
6: A2 n 9.666667 1.5275252 13.66667 1.5275252 12.33333 1.5275252
7: B2 p 11.666667 0.5773503 12.66667 1.5275252 13.33333 1.1547005
8: B2 q 9.000000 1.4142136 13.50000 2.1213203 11.50000 0.7071068
9: A3 n 12.000000 0.0000000 12.00000 1.4142136 13.00000 1.4142136
10: A3 m 9.666667 1.5275252 13.66667 1.5275252 12.33333 1.5275252
11: B3 q 12.000000 0.0000000 12.00000 1.4142136 13.00000 1.4142136
12: B3 p 9.666667 1.5275252 13.66667 1.5275252 12.33333 1.5275252
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.