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

  • 本文关键字:频率计 for 循环 有没有 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 表,其中输出将等位基因列和范围作为行

我遇到的问题是我希望能够添加与行匹配的所有频率计数,即如果等位基因 = 0 和范围 = 正常,然后将所有匹配行的频率加在一起。

感觉有一个简单的解决方案,但我似乎想不出一个。任何帮助都非常感谢

1

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

阿拉伯数字

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

3

library(reshape2)
dcast(dd, Range ~ Allele, value.var = "Frequency", fun.aggregate = sum)
#   Range 0 1  2
#1   High 1 9 28
#2 Normal 2 7 17

最新更新