R 使用tapply根据列名计算平均值

R 使用tapply根据列名计算平均值,r,R,我有一个看起来像这样的数据集: sample_id target_id tpm 1 SRR3884840X (A)n 0.00000 2 SRR3884840X (AC)n 0.00000 3 SRR3884840X (AG)n 0.00000 4 SRR3884840X (AT)n 15.54990 5 SRR3884840X (C)n

我有一个看起来像这样的数据集:

   sample_id       target_id     tpm
1 SRR3884840X           (A)n     0.00000
2 SRR3884840X           (AC)n    0.00000
3 SRR3884840X           (AG)n    0.00000
4 SRR3884840X           (AT)n    15.54990
5 SRR3884840X           (C)n     3.10997
6 SRR3884840X           (CAA)n   6.21995
27357  SRR3884841X      (A)n     0.00000e+00
27358  SRR3884841X      (AC)n    0.00000e+00
27359  SRR3884841X      (AG)n    0.00000e+00
27360  SRR3884841X      (AT)n    0.00000e+00
27361  SRR3884841X      (C)n 1.  76941e+01
27362  SRR3884841X      (CAA)n 3.53882e+01
1094236 SRR3884878C comp78901_c0_seq3_1      916                
1094237 SRR3884878C comp85230_c0_seq1_1      1002                  
1094238 SRR3884878C comp56944_c0_seq1_1      2285              

example data:
> dput(droplevels(head(teX,15)))
structure(list(sample_id = structure(c(1L, 1L, 1L, 1L, 1L, 1L,  
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = "SRR3884840X", class
"factor"), 
target_id = structure(1:15, .Label = c("(A)n", "(AC)n", "(AG)n", 
"(AT)n", "(C)n", "(CAA)n", "(CAAA)n", "(CAAAA)n", "(CAAAAA)n", 
"(CCA)n", "(CCCCA)n", "(CCCCAA)n", "(CCCCCA)n", "(CCCGAA)n", 
"(CCCTAA)n"), class = "factor"), tpm = c(0, 0, 0, 15.5499, 
3.10997, 6.21995, 43.5396, 9.32992, 3.10997, 0, 0, 0, 0, 
0, 0)), .Names = c("sample_id", "target_id", "tpm"), row.names = c(NA, 
15L), class = "data.frame")
我想计算每个目标id的平均tpm(10个样本id中约12000个目标id),因此我使用了Lappy:

teXmean <- tapply(teX$target_id , teX$tpm, mean) 

有没有办法恢复每个平均值的目标id,或者我完全走错了路?最终目标是计算每个target_id的平均值,删除target_id包含字符串“comp”的条目,然后使用heatmap生成热图

您也可以使用
dplyr


选项卡
#>包装附件:“dplyr”
#>以下对象已从“package:stats”屏蔽:
#> 
#>滤波器,滞后
#>以下对象已从“package:base”屏蔽:
#> 
#>相交、setdiff、setequal、并集
制表符%>%
分组依据(目标id)%>%
总结(平均值=平均值(tpm))
#>#tibble:15 x 2
#>目标\u id表示\u tpm
#>           
#>1(A)n 0.00000
#>2(AC)n 0.00000
#>3(德国)新西兰元0.00000
#>4(AT)n 15.54990
#>5(C)n 3.10997
#>6(CAA)n 6.21995
#>7(CAAA)n 43.53960
#>8(CAAAA)n 9.32992
#>9(CAAAAA)n 3.10997
#>10(CCA)0.00000新西兰元
#>11(CCCCA)0.00000新西兰元
#>12(CCCCAA)0.00000新西兰元
#>13(CCCCCA)0.00000新西兰元
#>14(CCCGAA)0.00000新西兰元
#>15(CCCTAA)0.00000新西兰元

您有一个输入错误。尝试反转参数:
tapply(teX$tpm,teX$target\u id,mean)
或显式提供参数名称
tapply(INDEX=teX$target\u id,X=teX$tpm,FUN=mean)
。也请注意,如果有任何缺少的值,
mean
将返回
NA
,因此将来您可以更明确地说
tapply(teX$tpm,teX$target\u id,function(x)mean(x,NA.rm=TRUE))
@MarkWhite编写
tapply(teX$tpm,teX$target\u id,mean,NA.rm=TRUE)更简单)
@HubertL很好的电话——我可以发誓,这在以前的很多时候对我都不起作用。
   0 2.25378e-10 3.21558e-10 4.49778e-10  4.5942e-10 4.63221e-10  5.5716e-10 5.63276e-10 5.90753e-10 6.20478e-10 
     NA          NA          NA          NA          NA          NA          NA          NA          NA          NA