使用dplyr group_by查找分数大于等于2的每个组的分数?

时间:2019-06-10 23:25:01

标签: r dplyr

我在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
.
.
.

2 个答案:

答案 0 :(得分:1)

也许您正在寻找这个

library(dplyr)

df %>%
  group_by(Site) %>%
  summarise(Frac = sum(PhyloP_n >= 2, na.rm = TRUE)) %>%
  mutate(Frac = Frac/sum(Frac))

在这里,我们首先计算每个PhyloP_n >= 2Site的数量,然后计算总比率。


我们还可以使用aggregate

在基数R中执行此操作
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