1

我正在寻求帮助编写一个 R 循环来计算每个独特单倍型的香农信息内容 (SIC)。数据包括第 1 列中的单倍型和第 2 列中的单倍型频率。正如您在示例数据中看到的那样,只有 4 个独特的单倍型,每种单倍型的数量不同,频率对应于每个单倍型。所有单倍型 H* 的频率总和为 1。SIC 的方程为

Σi (πhi*log(1/(πhi)))

其中 πhi 是 hi 单倍型的频率

SIC 方程

Haplotype   Frequency
H1  0.8278
H1  0.02248
H1  0.1494
H2  0.8238
H2  0.02248
H2  0.1497
H3  0.1497
H3  0.02248
H3  0.8244
H4  0.628
H4  0.02248
H4  0.1483
H4  0.1637
H4  0.01081
H4  0.01798

在本例中,H1 的 SIC 为

(π*0.8278*log(1/(π*0.8278))) + (π*0.02248*log(1/(π*0.02248))) + (π*0.1494*log(1/(π*0.1494)))

最终输出应给出 4 个 SIC 值,一个对应于每个独特的单倍型。

我相信使用lapply()是前进的正确方法,但我的 R 技能非常初级,不知道下一步该做什么。感谢您的任何帮助。

4

2 回答 2

2

你想要aggregate

result <- aggregate(df, by = list(df$Haplotype), function (h) sic(h[2]))
于 2013-11-04T16:08:15.843 回答
2
library(plyr)
ddply(df1,.(Haplotype),summarize,mysum=sum(pi*Frequency*log(1/(pi*Frequency))))
  Haplotype      mysum
1        H1 -1.9433259
2        H2 -1.9190102
3        H3 -1.9226882
4        H4 -0.1784109

library(data.table)
dt1<-data.table(df1)
dt1[,list(sum=sum(pi*Frequency*log(1/(pi*Frequency)))),by=Haplotype]
   Haplotype        sum
1:        H1 -1.9433259
2:        H2 -1.9190102
3:        H3 -1.9226882
4:        H4 -0.1784109
于 2013-11-04T17:42:10.050 回答