如何在几个条件下计算R中的平均值
How to calculate the mean in R with several conditions
我正在尝试计算此数据框的均值并将它们分组到一个故事中!我知道如何在 excel 中使用 averageifs 来做到这一点,但因为我想最终获得标准差和变异系数 (CV),所以我需要在 R 中学习。
现在我只需要平均值。这是我的条件:
我需要一个 table,其中我的时间间隔 "stim_ending_t" 从 1.0 到 3.5 连续排列。对于时间间隔,我需要在计算 "key_resp_2.rt"
的平均值时满足这三个条件
只有图像能见度和音量(V=1 & s=0)
只有声音 (V=0 & s=1)
空白(V=0 & s=0)
The data frame
Expected out come
这将计算 stim_ending_t (6) x 模态 (3) = 18 组均值。
首先我会生成一些数据,例如您的 analysis_v
或 analysis_a
数据框:
library(dplyr)
library(tidyr)
analysis_v <- data.frame(stim_ending_t = rep(seq(1, 3.5, 0.5), each = 30),
visbility = rep(c(1, 0, 0), 60),
soundvolume = rep(c(0, 1, 0), 60),
key_resp_2.rt = runif(180, 1, 5))
然后我将对象通过管道传输到代码块中:
analysis_v %>%
group_by(stim_ending_t, visbility, soundvolume) %>%
summarize(average = mean(key_resp_2.rt)) %>%
ungroup() %>%
mutate(key = case_when(visbility == 0 & soundvolume == 0 ~ "blank",
visbility == 0 & soundvolume == 1 ~ "only_sound",
visbility == 1 & soundvolume == 0 ~ "only_images")) %>%
select(-visbility, -soundvolume) %>%
spread(key, average)
这导致请求的输出格式:
# A tibble: 6 x 4
stim_ending_t blank only_images only_sound
<dbl> <dbl> <dbl> <dbl>
1 1 3.28 3.55 2.84
2 1.5 2.64 3.11 2.32
3 2 3.27 3.72 2.42
4 2.5 2.14 3.01 2.30
5 3 2.47 3.03 3.02
6 3.5 2.93 2.92 2.78
您需要使用 analysis_a
重复代码块才能获得这些方法。
感谢您@Matthew Schuelke 的帮助,但是使用您的代码,我每次 运行 代码时都会得到不同的结果。
以下是我用这段代码解决问题的方法:
name of the new data = (name of the data frame without the parentheses) %>%
group_by(stim_ending_t, visbility, soundvolume, Opening_text) %>%
summarize(m = mean(key_resp_2.rt),
sd = sd(key_resp_2.rt),
coefVar = cv(key_resp_2.rt))
我想要的结果:
stim_ending_t visbility soundvolume Opening_text m sd coefVar
<dbl> <dbl> <dbl> <chr> <dbl> <dbl> <dbl>
1 1 0 0 Now focus on the Image 1.70 1.14 0.670
2 1 0 0 Now focus on the Sound 1.57 0.794 0.504
3 1 0 1 Now focus on the Image 1.62 1.25 0.772
4 1 0 1 Now focus on the Sound 1.84 1.17 0.637
5 1 1 0 Now focus on the Image 3.19 17.2 5.38
6 1 1 0 Now focus on the Sound 1.59 0.706 0.444
我正在尝试计算此数据框的均值并将它们分组到一个故事中!我知道如何在 excel 中使用 averageifs 来做到这一点,但因为我想最终获得标准差和变异系数 (CV),所以我需要在 R 中学习。
现在我只需要平均值。这是我的条件:
我需要一个 table,其中我的时间间隔 "stim_ending_t" 从 1.0 到 3.5 连续排列。对于时间间隔,我需要在计算 "key_resp_2.rt"
的平均值时满足这三个条件只有图像能见度和音量(V=1 & s=0)
只有声音 (V=0 & s=1)
空白(V=0 & s=0)
The data frame
Expected out come
这将计算 stim_ending_t (6) x 模态 (3) = 18 组均值。
首先我会生成一些数据,例如您的 analysis_v
或 analysis_a
数据框:
library(dplyr)
library(tidyr)
analysis_v <- data.frame(stim_ending_t = rep(seq(1, 3.5, 0.5), each = 30),
visbility = rep(c(1, 0, 0), 60),
soundvolume = rep(c(0, 1, 0), 60),
key_resp_2.rt = runif(180, 1, 5))
然后我将对象通过管道传输到代码块中:
analysis_v %>%
group_by(stim_ending_t, visbility, soundvolume) %>%
summarize(average = mean(key_resp_2.rt)) %>%
ungroup() %>%
mutate(key = case_when(visbility == 0 & soundvolume == 0 ~ "blank",
visbility == 0 & soundvolume == 1 ~ "only_sound",
visbility == 1 & soundvolume == 0 ~ "only_images")) %>%
select(-visbility, -soundvolume) %>%
spread(key, average)
这导致请求的输出格式:
# A tibble: 6 x 4
stim_ending_t blank only_images only_sound
<dbl> <dbl> <dbl> <dbl>
1 1 3.28 3.55 2.84
2 1.5 2.64 3.11 2.32
3 2 3.27 3.72 2.42
4 2.5 2.14 3.01 2.30
5 3 2.47 3.03 3.02
6 3.5 2.93 2.92 2.78
您需要使用 analysis_a
重复代码块才能获得这些方法。
感谢您@Matthew Schuelke 的帮助,但是使用您的代码,我每次 运行 代码时都会得到不同的结果。
以下是我用这段代码解决问题的方法:
name of the new data = (name of the data frame without the parentheses) %>%
group_by(stim_ending_t, visbility, soundvolume, Opening_text) %>%
summarize(m = mean(key_resp_2.rt),
sd = sd(key_resp_2.rt),
coefVar = cv(key_resp_2.rt))
我想要的结果:
stim_ending_t visbility soundvolume Opening_text m sd coefVar
<dbl> <dbl> <dbl> <chr> <dbl> <dbl> <dbl>
1 1 0 0 Now focus on the Image 1.70 1.14 0.670
2 1 0 0 Now focus on the Sound 1.57 0.794 0.504
3 1 0 1 Now focus on the Image 1.62 1.25 0.772
4 1 0 1 Now focus on the Sound 1.84 1.17 0.637
5 1 1 0 Now focus on the Image 3.19 17.2 5.38
6 1 1 0 Now focus on the Sound 1.59 0.706 0.444