[英]R: Caculating new variable by category with a different equation for each category
[英]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單倍型的頻率
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.