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