我想计算 R 中的标准偏差。但标准函数“sd(x)”不是我需要的函数。我正在寻找一个函数来计算 sd(x,依赖于我的数据框中的另一个变量)。这样我就可以通过依赖变量(图像)添加一个带有 sd 的新列。像这样:
image answer sd
a 1 0,70
a 2 0,70
b 2 2,12
b 5 2,12
我想计算 R 中的标准偏差。但标准函数“sd(x)”不是我需要的函数。我正在寻找一个函数来计算 sd(x,依赖于我的数据框中的另一个变量)。这样我就可以通过依赖变量(图像)添加一个带有 sd 的新列。像这样:
image answer sd
a 1 0,70
a 2 0,70
b 2 2,12
b 5 2,12
功能ave
非常适合这一点。
dat <- read.table(text = "
image answer sd
a 1 0,70
a 2 0,70
b 2 2,12
b 5 2,12
", header = TRUE, dec = ",")
ave(dat$answer, dat$image, FUN = sd)
#[1] 0.7071068 0.7071068 2.1213203 2.1213203
编辑。
在评论中与亨利的对话之后,我决定编辑答案。幸运的是,与此同时,我意识到原始数据集使用逗号作为小数点。
因此,首先进行更改,以dec = ","
在read.table
上述内容中包含参数。
第二个更改,以显示由指令sd
创建的列的完整解决方案。ave
dat2 <- dat[-3] # start with the OP's data without the 3rd column
dat2$sd <- ave(dat2$answer, dat2$image, FUN = sd)
dat2
# image answer sd
#1 a 1 0.7071068
#2 a 2 0.7071068
#3 b 2 2.1213203
#4 b 5 2.1213203
我的理解是,您需要每个图像的答案的标准偏差。您可以按图像对 df 进行分组,然后使用 sd,它将使用 dplyr 为每个组单独计算。
df <- data.frame(image = c('a', 'a', 'b', 'b'),
answer = c(1, 2, 2, 5))
library(dplyr)
df %>%
group_by(image) %>%
mutate(sd = sd(answer))