计算跨行的标准偏差 [英] Calculating standard deviation across rows
本文介绍了计算跨行的标准偏差的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
假设我有以下数据:
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 列中值的行均值和标准差.
I want to get the row means and standard deviations for the values in columns B-D.
我可以按如下方式计算 rowMeans:
I can calculate the rowMeans as follows:
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()
计算标准偏差时,它抛出了一个错误.
But when I try to calculate the standard deviation using sd()
, it throws up an error.
df %>% select(., matches("colB|colC|colD")) %>% mutate(rsds = sapply(., sd(.)))
Error in is.data.frame(x) :
(list) object cannot be coerced to type 'double'
所以我的问题是:我如何计算这里的标准偏差?
So my question is: how do I calculate the standard deviations here?
我尝试了 sapply()
和 sd()
阅读了第一个答案 此处.
I tried sapply()
with sd()
having read the first answer here.
附加不一定要寻找整洁"的解决方案(基础 R 也可以正常工作).
Additional edit: not necessarily looking for a 'tidy' solution (base R also works just fine).
推荐答案
试试这个 (使用),使用 matrixStats
包中的 rowSds
,
Try this (using), withrowSds
from the matrixStats
package,
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
这篇关于计算跨行的标准偏差的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文