我在R中有一个名为splicing
的数据框,看起来像以下内容(简化):
Site PhyloP_n
50 -1.546
50 -1.546
50 -1.546
49 2.125
49 2.125
48 -0.282
48 -0.282
47 0.596
47 0.596
46 3.561
46 3.561
每个Site
在整个数据框中都有多个PhyloP_n
得分。我想做的是在每个站点上获得PhyloP_n分数> = 2的分数。目前,这是我的设置方式,但无法正常工作:
splicing_high_phylop <- splicing %>%
group_by(Site) %>%
filter(PhyloP_n >= 2 )
dplyr::summarize(Fraction = (sum(PhyloP_n >= 2, na.rm = TRUE) / tally()))
预期输出:
Site Fraction with PhyloP_n >= 2
50 0.3
49 0.1
48 0.04
47 0.21
.
.
.
答案 0 :(得分:1)
也许您正在寻找这个
library(dplyr)
df %>%
group_by(Site) %>%
summarise(Frac = sum(PhyloP_n >= 2, na.rm = TRUE)) %>%
mutate(Frac = Frac/sum(Frac))
在这里,我们首先计算每个PhyloP_n >= 2
中Site
的数量,然后计算总比率。
我们还可以使用aggregate
df1 <- aggregate(PhyloP_n~Site, df, function(x) sum(x >= 2, na.rm = TRUE))
df1$Frac <- df1$PhyloP_n/sum(df1$PhyloP_n)
答案 1 :(得分:0)
我们可以使用data.table
方法。将'data.frame'转换为'data.table'(setDT(df)
),按'Site'分组,获取逻辑向量(sum
的{{1}},然后更新'除以“分数”的PhyloP_n >=2
sum