如何在具有不同后缀的变量之间创建平均值



我想学习一种更有效的方法来获得具有不同后缀的平均值,例如_L和_R。

对于每个大脑区域,我想创建一个新的变量,即左右半球之间的平均值。这由后缀_L_R表示。

我在excel中手动完成这项工作,但它可能容易出错。

数据集当前为长格式。示例:对于每个受试者,目标是创建一个新的region,称为odi.lobar.Temporal_Average,它是0.0307670.371568的平均值。

subject region  value
1   odi.lobar.Temporal_L    0.030767
1   odi.lobar.Temporal_R    0.371568
2   odi.lobar.Temporal_L    0.371568
2   odi.lobar.Temporal_R    0.369251

非常感谢。

在基R中,可以删除带有sub的后缀并使用aggregate-

res <- aggregate(value ~ region + subject, 
transform(df, region = sub('_.*', '', region)), mean, na.rm = TRUE)
res
#             region subject     value
#1 odi.lobar.Temporal       1 0.2011675
#2 odi.lobar.Temporal       2 0.3704095

如果您想要每个subject的平均值,并且如果每个subject只有一个值用于每个region:

数据:

df <- data.frame(subject = c("1","1","2","2"),
region = c("odi.lobar.Temporal_L","odi.lobar.Temporal_R","odi.lobar.Temporal_L","odi.lobar.Temporal_R"),
value = c(0.030767,0.371568,0.371568,0.369251))

代码:

library(dplyr)
output <- df %>%
group_by(subject) %>%
summarise(odi.lobar.Temporal_Average= mean(value))

输出:

subject odi.lobar.Temporal_Average
<chr>                        <dbl>
1 1                            0.201
2 2                            0.370

编辑:如果你想保留初始数据:

output <- df %>%
group_by(subject) %>%
summarise(odi.lobar.Temporal_Average = mean(value))%>% 
pivot_longer(odi.lobar.Temporal_Average) %>% 
rename(region = name) %>% 
bind_rows(df) %>% 
arrange(subject)

输出:

subject region                      value
<chr>   <chr>                       <dbl>
1 1       odi.lobar.Temporal_Average 0.201 
2 1       odi.lobar.Temporal_L       0.0308
3 1       odi.lobar.Temporal_R       0.372 
4 2       odi.lobar.Temporal_Average 0.370 
5 2       odi.lobar.Temporal_L       0.372 
6 2       odi.lobar.Temporal_R       0.369 
library(tidyverse)
df1 %>%
separate(region, c("region", "side"), sep = "_") %>%
group_by(subject, region = paste0(region, "_Average")) %>%
summarize(value = mean(value), .groups = "drop") %>%
bind_rows(df1)

# A tibble: 6 x 3
subject region                      value
<int> <chr>                       <dbl>
1       1 odi.lobar.Temporal_Average 0.201 
2       2 odi.lobar.Temporal_Average 0.370 
3       1 odi.lobar.Temporal_L       0.0308
4       1 odi.lobar.Temporal_R       0.372 
5       2 odi.lobar.Temporal_L       0.372 
6       2 odi.lobar.Temporal_R       0.369 

最新更新