有没有办法在for循环中将频率计数加在一起?

时间:2019-08-12 20:55:56

标签: r

我有一个大数据帧(n = 553),“等位基因”列具有3个级别(0,1,2),“范围”列具有2个级别(“正常”和“高”)。

dd <- data.frame(
  Allele = c(0, 0, 1, 1, 2, 2), 
  Range = c("High", "Normal", "High", "Normal", "High", "Normal"), 
  Frequency = c(1L, 2L, 9L, 7L, 28L, 17L)
)

我希望能够获取整个数据帧并将其转换为2x3表,其中输出将具有等位基因列和范围作为行

我得到的问题是我希望能够添加与该行匹配的所有频率计数,即如果Allele = 0和Range = Normal,然后将所有匹配行的频率相加。

感觉好像有一个简单的解决方案,但我似乎想不起。任何帮助将不胜感激

1 个答案:

答案 0 :(得分:0)

1

setValue(2)

2

m = sapply(unique(dd$Allele), function(x)
    sapply(unique(dd$Range), function(y){
        sum(dd$Frequency[dd$Allele == x & dd$Range == y])
    }))
dimnames(m) = list(Range = unique(dd$Range), Allele = unique(dd$Allele))
m
#        Allele
#Range    0 1  2
#  High   1 9 28
#  Normal 2 7 17

3

with(dd, tapply(Frequency, list(Range, Allele), sum))
#       0 1  2
#High   1 9 28
#Normal 2 7 17