首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R中某些行的平均值

R中某些行的平均值
EN

Stack Overflow用户
提问于 2014-10-31 20:52:05
回答 5查看 3.2K关注 0票数 0

在处理数据框表时,我还没有找到一种方法来求R中某些列的平均值。基本上,我想取3个控件(CTR_R1+CTR_R2+CTR_R3)的平均值,并将该值作为紧跟在CTR_R3后面的另一列插入(见下文)。TRT也是如此。是否可以取平均值并将其插入到特定位置?

代码语言:javascript
复制
GeneID|CTR_R1|CTR_R2|CTR_R3|CTR_AVG|TRT_R1| TRT_R2| TRT_R3|TRT_AVG|pValue
EN

回答 5

Stack Overflow用户

发布于 2014-10-31 20:58:37

即使有许多CTRTRT列(即100列),下面的代码也应该可以工作。但是,我猜@初学者的解决方案会更快。

代码语言:javascript
复制
indx <- grep("^CTR", colnames(df1), value=TRUE)
indxT <- grep("^TRT", colnames(df1), value=TRUE)
df1[,c('CTR_Avg', 'TRT_Avg')] <- lapply(list(indx, indxT), 
                    function(x) Reduce(`+`, df1[,x])/length(x))

或者,您可以在上面的步骤中使用rowMeans

代码语言:javascript
复制
df2 <- df1[,c('GeneID', indx, 'CTR_Avg', indxT, 'TRT_Avg', 'pValue')]

head(df2,2)
#    GeneID CTR_R1 CTR_R2 CTR_R3  CTR_Avg TRT_R1 TRT_R2 TRT_R3 TRT_Avg pValue
#1      1      6      2     10 6.000000     10     11     15      12  0.091
#2      2      5     12      8 8.333333      5      3     13       7  0.051

数据

代码语言:javascript
复制
set.seed(24)
df1 <- as.data.frame(matrix(sample(1:20,20*6, replace=TRUE), ncol=6))
colnames(df1) <- c("CTR_R1", "CTR_R2", "CTR_R3", "TRT_R1", "TRT_R2", "TRT_R3")
df1 <- cbind(GeneID=1:20, df1, 
            pValue=sample(seq(0.001, 0.10, by=0.01), 20, replace=TRUE))
票数 1
EN

Stack Overflow用户

发布于 2014-10-31 21:00:08

如果您的data.frame名为df,则此代码应该可以为您工作

代码语言:javascript
复制
df$CTR_AVG <- ( df$CTR_R1 + df$CTR_R2 + df$CTR_R3 ) / 3

这是假设CTR_AVG列已经存在,如您在问题中所示。如果没有,代码将把该列放在data.frame的末尾。要将其移动到正确的位置,您需要按正确的顺序选择列,如下所示:

代码语言:javascript
复制
df[ , c( 'GeneID', 'CTR_R1', 'CTR_R2', 'CTR_R3', 'CTR_AVG', 'TRT_R1', 'TRT_R2', 'TRT_R3','TRT_AVG','pValue' ] 
票数 1
EN

Stack Overflow用户

发布于 2014-10-31 21:04:26

怎么样

代码语言:javascript
复制
df$CTR_AVG <- rowMeans(df[,2:4])
df$TRT_AVG <- rowMeans(df[,6:8])
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26675166

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档