% mutate(rmeans = rowMeans(.)) # colB colC -6ren">
gpt4 book ai didi

R/tidyverse : calculating standard deviation across rows

转载 作者:行者123 更新时间:2023-12-04 10:45:51 24 4
gpt4 key购买 nike

说我有以下数据:

colA <- c("SampA", "SampB", "SampC")
colB <- c(21, 20, 30)
colC <- c(15, 14, 12)
colD <- c(10, 22, 18)
df <- data.frame(colA, colB, colC, colD)
df
# colA colB colC colD
# 1 SampA 21 15 10
# 2 SampB 20 14 22
# 3 SampC 30 12 18

我想获取B-D列中值的行均值和标准差。

我可以按以下方式计算rowMeans:
library(dplyr)
df %>% select(., matches("colB|colC|colD")) %>% mutate(rmeans = rowMeans(.))
# colB colC colD rmeans
# 1 21 15 10 15.33333
# 2 20 14 22 18.66667
# 3 30 12 18 20.00000

但是,当我尝试使用 sd()计算标准偏差时,会引发错误。
df %>% select(., matches("colB|colC|colD")) %>% mutate(rsds = sapply(., sd(.)))
Error in is.data.frame(x) :
(list) object cannot be coerced to type 'double'

所以我的问题是:如何在此处计算标准偏差?

编辑:我已经阅读了第一个答案 here,尝试将 sapply()sd()一起使用。

附加编辑:不一定要寻找“整洁”的解决方案(基数R也可以正常工作)。

最佳答案

试试这个(using),结合rowSds包中的matrixStats

library(dplyr)
library(matrixStats)

columns <- c('colB', 'colC', 'colD')

df %>%
mutate(Mean= rowMeans(.[columns]), stdev=rowSds(as.matrix(.[columns])))

退货
   colA colB colC colD     Mean    stdev
1 SampA 21 15 10 15.33333 5.507571
2 SampB 20 14 22 18.66667 4.163332
3 SampC 30 12 18 20.00000 9.165151

您的资料
colA <- c("SampA", "SampB", "SampC")
colB <- c(21, 20, 30)
colC <- c(15, 14, 12)
colD <- c(10, 22, 18)
df <- data.frame(colA, colB, colC, colD)
df

关于R/tidyverse : calculating standard deviation across rows,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55327096/

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