我有一个与样本相关的观察结果列表。我想删除出现在特定样本对中的相同观察结果。

数据示例:

sample observation
sample1A 5
sample1B 7
sample2A 10
sample2B 10
sample3A 10
sample3B 5

所以我们的想法是根据字母 A 和 B 将样本分组,然后对于这些对中的每一对删除具有匹配观察值的任何行。

在上述情况下,只有来自样本 2A 和样本 2B 的观察结果将被排除,因为它们来自同一样本样本 2,在两个不同的场合(样本 2A 和样本 2B)采样。输出将如下所示:
sample observation
sample1A 5
sample1B 7
sample3A 10
sample3B 5

如果可以使用 DPLYR 来做到这一点,那将更加有用,因为我正在努力提高我对它的熟练程度。

我想使用 group_by() 根据样本名称将数据分类到组中,然后使用 filter() 可以工作,但我不确定如何处理基于正则表达式或字符串的第一个配对的嵌套条件,然后过滤通过查找行之间的匹配值。

在此先感谢您的帮助。

最佳答案

我们可以通过删除 'sample' 中的最后一个字符,然后根据唯一 'observation' 的数量删除 filter 来创建一个组,即如果 length 大于 1,我们保留它

library(dplyr)
df2 %>%
  group_by(grp = sub("[A-Z]$", "", sample)) %>%
  filter(n_distinct(observation)>1) %>%
  ungroup() %>%
  select(-grp)
# A tibble: 4 x 2
#    sample observation
#      <chr>       <int>
#1 sample1A           5
#2 sample1B           7
#3 sample3A          10
#4 sample3B           5

数据
df2 <- structure(list(sample = c("sample1A", "sample1B", "sample2A",
"sample2B", "sample3A", "sample3B"), observation = c(5L, 7L,
10L, 10L, 10L, 5L)), .Names = c("sample", "observation"),
 class = "data.frame", row.names = c(NA, -6L))

关于r - 过滤掉 R 中特定样本对中存在的观察结果,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46077756/

10-11 23:04
查看更多