使用dplyr删除重复观测

使用dplyr删除重复观测,r,filter,dplyr,R,Filter,Dplyr,这是前一个问题的后续问题,我认为前一个解决方案似乎不适用于更复杂的数据集。 上一个问题: 我试图过滤数据集,以排除在特定样本对中存在重复观测的行 新的数据集包含许多不同的相关样本对 sample observation1 observation2 sample1A 10 x sample1A 15 y sample1A 20 x sample1B 7 h sample1B 15 a sample1B 22 s sample2A 10 g sample2A 11 g sample2A 14 g

这是前一个问题的后续问题,我认为前一个解决方案似乎不适用于更复杂的数据集。 上一个问题:

我试图过滤数据集,以排除在特定样本对中存在重复观测的行

新的数据集包含许多不同的相关样本对

sample observation1 observation2
sample1A 10 x
sample1A 15 y
sample1A 20 x
sample1B 7 h
sample1B 15 a
sample1B 22 s
sample2A 10 g
sample2A 11 g
sample2A 14 g
sample2A 20 h
sample2B 10 a
sample2B 30 t
sample2B 40 a
sample2B 50 h
在上面的示例中,我需要排除以下行:与样本1B相比,样本1a的观测值与样本1B相同;与样本2B相比,样本2a的观测值与样本1B相同(对于更多的样本对,依此类推)。observation2条目与筛选无关。 因此,在上面的示例中,它最终看起来像:

sample observation1 observation2
    sample1A 10 x
    sample1A 20 x
    sample1B 7 h
    sample1B 22 s
    sample2A 11 g
    sample2A 14 g
    sample2A 20 h
    sample2B 30 t
    sample2B 40 a
    sample2B 50 h
以前的解决方案(如下)在每个样本只有一个观测值时有效,但现在每个样本可以有多行观测值,我只想排除观测值1在samplexA和samplexB之间匹配的行

data %>%
  group_by(grp = substr(sample, 1, nchar(sample)-1)) %>%
  filter(n_distinct(observation1)>1) %>% 
  ungroup() %>%  
  select(sampleID, pos, grp)

请告诉我是否可以澄清问题,并提前表示感谢。

这是对您的代码的修改。我们可以通过两列对u进行分组,计算每个组的数量,并过滤等于1的组计数

library(dplyr)

dt2 <- dt %>% 
  group_by(grp = substr(sample, 1, nchar(sample) - 1), observation1) %>%
  filter(n() == 1) %>% 
  ungroup() %>%  
  select(-grp)

dt2
# A tibble: 10 x 3
     sample observation1 observation2
      <chr>        <int>        <chr>
 1 sample1A           10            x
 2 sample1A           20            x
 3 sample1B            7            h
 4 sample1B           22            s
 5 sample2A           11            g
 6 sample2A           14            g
 7 sample2A           20            h
 8 sample2B           30            t
 9 sample2B           40            a
10 sample2B           50            h
库(dplyr)
dt2%
分组依据(grp=substr(样本1,nchar(样本)-1),观察1)%>%
筛选器(n()==1)%>%
解组()%>%
选择(-grp)
dt2
#一个tibble:10x3
样本观测1观测2
1个样本1A 10 x
2个样本1A 20 x
3个样本1b 7小时
4个样本1b 22 s
5样本2A 11克
6样本2A 14克
7样本2a 20小时
8个样本2b 30 t
9样本2B 40 a
10个样本2b 50小时
资料
dt
dt <- read.table(text = "sample observation1 observation2
sample1A 10 x
                 sample1A 15 y
                 sample1A 20 x
                 sample1B 7 h
                 sample1B 15 a
                 sample1B 22 s
                 sample2A 10 g
                 sample2A 11 g
                 sample2A 14 g
                 sample2A 20 h
                 sample2B 10 a
                 sample2B 30 t
                 sample2B 40 a
                 sample2B 50 h",
                 header = TRUE, stringsAsFactors = FALSE)