>我有一个大数据框(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