根据DPLYR中观察到的样品百分比进行过滤

时间:2017-11-28 16:27:48

标签: r dplyr

我有一个包含多个样本的数据表。对于每个样本,有多个观察结果。并非所有样本都有相同的观察结果。我想过滤此表以删除值> gt的观察值x和观察到的> y%的样本。

例如,我有观察样本。我想用分数>过滤掉观察结果但是,只有当观察发生在> 75%的样本。

Sample  Month   Day score
A   1   1   8
A   2   2   3
A   5   3   9
B   1   1   8
B   2   2   3
B   5   3   9
C   1   1   8
C   2   4   2
C   2   5   20
D   1   1   8
D   2   5   20
D   5   6   9

所以这里只有第1个月和第1天的观察将被删除,因为它发生在得分> 1的所有样本中。 8.没有其他观察结果。 75%的样本。

我希望能够使用DPLYR进行此过滤。我知道我可以group_by Month和Day并使用小于或等于8的分数过滤()观察但是如何将其与仅包含仅在一定百分比的样本中发生观察的行相结合?

1 个答案:

答案 0 :(得分:1)

如果我理解正确,您可以执行以下操作:

n_samples  <- n_distinct(df$Sample) # total number of samples
df %>% 
  group_by(score, Month, Day) %>% 
  filter(!((n_distinct(Sample)/n_samples > 0.75) & (score > 5)))
# # A tibble: 8 x 4
# # Groups:   score, Month, Day [5]
#    Sample Month   Day score
#   <fctr> <int> <int> <int>
# 1      A     2     2     3
# 2      A     5     3     9
# 3      B     2     2     3
# 4      B     5     3     9
# 5      C     2     4     2
# 6      C     2     5    20
# 7      D     2     5    20
# 8      D     5     6     9