在使用数据框表时,我还没有找到一种方法在R中的SOME列中取平均值。基本上,我想取3个控件的平均值(CTR_R1 + CTR_R2 + CTR_R3)并在CTR_R3之后插入该值作为另一个列(见下文)。 TRT也是如此。 是否需要取平均值并将其插入特定位置?
GeneID|CTR_R1|CTR_R2|CTR_R3|CTR_AVG|TRT_R1| TRT_R2| TRT_R3|TRT_AVG|pValue
答案 0 :(得分:1)
即使有许多CTR
或TRT
列(即100个),以下代码也应该有效。但是,我猜@ beginneR的解决方案更快。
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
。
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
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 :(得分:1)
如果您的data.frame名为df
:
df$CTR_AVG <- ( df$CTR_R1 + df$CTR_R2 + df$CTR_R3 ) / 3
假设CTR_AVG
列已经存在,如您在问题中所示。如果没有,代码会将列放在data.frame的末尾。要将其移动到正确的位置,您需要按正确的顺序选择列,如下所示:
df[ , c( 'GeneID', 'CTR_R1', 'CTR_R2', 'CTR_R3', 'CTR_AVG', 'TRT_R1', 'TRT_R2', 'TRT_R3','TRT_AVG','pValue' ]
答案 2 :(得分:1)
怎么样
df$CTR_AVG <- rowMeans(df[,2:4])
df$TRT_AVG <- rowMeans(df[,6:8])
答案 3 :(得分:0)
制作一些虚拟数据
df=data.frame(CTR_R1=1:10,CTR_R2=1:10,CTR_R3=1:10,somethingelse=1:10)
获取新列
df$CTR_AVG=apply(df[c("CTR_R1","CTR_R2","CTR_R3")],1,mean)
答案 4 :(得分:0)
非常感谢您的回复。对不起,我没有更好地说出原来的问题。我想问一下如何编写一个脚本来取平均值并将该值放在正确的位置。我的表中没有列出&#34; CTR_AVG&#34;的列,也没有列&#34; TRT_AVG&#34;。 我想知道我是否可以做得更好而且优雅地#39;而不是做我在下面做的(这也有效)。
非常感谢。
#名称(edgeR_table)
&#34; GeneID&#34; &#34; CTR_R1&#34; &#34; CTR_R2&#34; &#34; CTR_R3&#34; &#34; TRT_R1&#34; &#34; TRT_R2&#34; &#34; TRT_R3&#34; &#34; logFC&#34; &#34; logCPM&#34; &#34; LR&#34; &#34; p值&#34; &#34; FDR&#34;
#edgeR_table $ CTR_AVG&lt; - rowMeans(edgeR_table [,2:4])
edgeR_table $ TRT_AVG&lt; - rowMeans(edgeR_table [,5:7])
edgeR_table&lt; - edgeR_table [,c(1,2,3,4,13,5,6,7,14,8,9,10,11,12)]