簡體   English   中英

R循環用於將方程應用於每個唯一類別

[英]R loop for applying an equation to each unique category

我正在尋求幫助來編寫R循環來計算每個獨特單倍型的shannon信息內容(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技能是非常基本的,知道下一步該做什么。 感謝您的任何幫助。

你想要aggregate

result <- aggregate(df, by = list(df$Haplotype), function (h) sic(h[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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM