我有一个大数据帧(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,然后将所有匹配行的频率相加。
感觉好像有一个简单的解决方案,但我似乎想不起。任何帮助将不胜感激
答案 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