gpt4 book ai didi

r - 计算按 ID 分组的多行的标准差

转载 作者:行者123 更新时间:2023-12-02 02:44:57 25 4
gpt4 key购买 nike

我想计算多行(不是每行)的标准差,然后将结果保存到新的数据框中。最好用一个例子来解释。

数据:

ID <- c("a","a","a","a","b","b","b","b","c","c","c","c")
y1 <- c(8,9,3,6,6,4,5,8,7,5,8,1)
y2 <- c(3,6,6,1,7,3,8,7,5,8,1,7)
y3 <- c(9,3,1,8,4,6,3,8,4,6,5,7)
df <- data.frame(ID, y1, y2, y3)

ID y1 y2 y3
1 a 8 3 9
2 a 9 6 3
3 a 3 6 1
4 a 6 1 8
5 b 6 7 4
6 b 4 3 6
7 b 5 8 3
8 b 8 7 8
9 c 7 5 4
10 c 5 8 6
11 c 8 1 5
12 c 1 7 7

我想计算 ID$a、ID$b 和 ID$c 的标准差并存储在新的数据框中。我知道我可以做到这一点:

sd_a <- sd(as.matrix(subset(df, ID == "a")), na.rm = TRUE)
sd_b <- sd(as.matrix(subset(df, ID == "b")), na.rm = TRUE)
sd_c <- sd(as.matrix(subset(df, ID == "c")), na.rm = TRUE)

ID <- c("a","b","c")
sd <- c(sd_a,sd_b,sd_c)
df2 <- data.frame(ID, sd)

ID sd
1 a 2.958040
2 b 1.912875
3 c 2.386833

但是有没有更直接的方法来实现这一目标?

最佳答案

您可以使用pivot_longer()y1堆叠到y3,然后计算sd

library(dplyr)
library(tidyr)

df %>%
pivot_longer(y1:y3) %>%
group_by(ID) %>%
summarise(sd = sd(value))

# # A tibble: 3 x 2
# ID sd
# <chr> <dbl>
# 1 a 2.96
# 2 b 1.91
# 3 c 2.39

关于r - 计算按 ID 分组的多行的标准差,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62970285/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com