假设我有以下数据:
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列中数值的行均值和标准差。
计算行均值可以按以下方式进行:
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'
所以我的问题是:我如何在这里计算标准偏差?编辑:我尝试了
sapply()
,并阅读了第一个答案here。附加编辑:不一定要寻找“整洁”的解决方案(基本R也可以正常工作)。
c_across
出现得更晚了? Hadley Wickham 在 这篇文章 中提到于 2020 年。 - Dunois