R:数据帧

系统教程 行业动态 更新时间:2024-06-14 17:01:33
R:数据帧 - 用平均值添加行(R: dataframe - adding rows with means)

我有这样的数据框

subject_id area side value confound1 confound2 confound3 s01 A left 5 154 952 no s01 A right 7 154 952 no s01 B left 15 154 952 no s01 B right 17 154 952 no s02 A left 3 130 870 yes s02 A right 5 130 870 yes s02 B left 12 130 870 yes s02 B right 11 130 870 yes

我想为每个主题的每个区域添加左右平均行,同时保留其他变量的值:

subject_id area side value confound1 confound2 confound3 s01 A left 5 154 952 no s01 A right 7 154 952 no s01 A avg 6 154 952 no s01 B left 15 154 952 no s01 B right 17 154 952 no s01 B avg 16 154 952 no s02 A left 3 130 870 yes s02 A right 5 130 870 yes s02 A avg 4 130 870 yes s02 B left 12 130 870 yes s02 B right 11 130 870 yes s02 B avg 11.5 130 870 yes

有关如何做到这一点的任何建议?

I have a data frame like this

subject_id area side value confound1 confound2 confound3 s01 A left 5 154 952 no s01 A right 7 154 952 no s01 B left 15 154 952 no s01 B right 17 154 952 no s02 A left 3 130 870 yes s02 A right 5 130 870 yes s02 B left 12 130 870 yes s02 B right 11 130 870 yes

I would like to add rows of averages between left and right for each area for each subject while keeping the values of the other variables:

subject_id area side value confound1 confound2 confound3 s01 A left 5 154 952 no s01 A right 7 154 952 no s01 A avg 6 154 952 no s01 B left 15 154 952 no s01 B right 17 154 952 no s01 B avg 16 154 952 no s02 A left 3 130 870 yes s02 A right 5 130 870 yes s02 A avg 4 130 870 yes s02 B left 12 130 870 yes s02 B right 11 130 870 yes s02 B avg 11.5 130 870 yes

Any suggestions for how to do this?

最满意答案

这是一个基本R函数aggregate和rbind 。

# get the data df <- read.table(header=T, text="subject_id area side value confound1 confound2 confound3 s01 A left 5 154 952 no s01 A right 7 154 952 no s01 B left 15 154 952 no s01 B right 17 154 952 no s02 A left 3 130 870 yes s02 A right 5 130 870 yes s02 B left 12 130 870 yes s02 B right 11 130 870 yes") # get the average values dfAgg <- aggregate(cbind(value=value, confound1=confound1, confound2=confound2, confound3=confound3) ~ subject_id + area, data=df, FUN=mean) # add variables dfAgg$side <- "side.avg" dfAgg$confound3 <- factor(dfAgg$confound3, labels=c("no", "yes")) #rbind the averages dfFinal <- rbind(df, dfAgg) # order the data dfFinal <- dfFinal[order(dfFinal$subject_id, dfFinal$area, dfFinal$side),]

Here is a method with base R functions aggregate and rbind.

# get the data df <- read.table(header=T, text="subject_id area side value confound1 confound2 confound3 s01 A left 5 154 952 no s01 A right 7 154 952 no s01 B left 15 154 952 no s01 B right 17 154 952 no s02 A left 3 130 870 yes s02 A right 5 130 870 yes s02 B left 12 130 870 yes s02 B right 11 130 870 yes") # get the average values dfAgg <- aggregate(cbind(value=value, confound1=confound1, confound2=confound2, confound3=confound3) ~ subject_id + area, data=df, FUN=mean) # add variables dfAgg$side <- "side.avg" dfAgg$confound3 <- factor(dfAgg$confound3, labels=c("no", "yes")) #rbind the averages dfFinal <- rbind(df, dfAgg) # order the data dfFinal <- dfFinal[order(dfFinal$subject_id, dfFinal$area, dfFinal$side),]

更多推荐

本文发布于:2023-04-20 18:31:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/dzcp/46e74905e21ed5b08aa5aac74bb8d9d0.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:数据

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!