使用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)