0

我想计算 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
4

2 回答 2

1

功能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
于 2017-10-10T13:24:05.640 回答
0

我的理解是,您需要每个图像的答案的标准偏差。您可以按图像对 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))
于 2017-10-10T13:23:30.823 回答