我的数据集的外观
ID Sample_Type Species
1 Sample A
1 Sample B
1 Sample C
1 Sample D
2 Sample A
2 Sample B
2 Sample C
2 Sample D
2 Sample E
2 Sample F
2 control NA
3 sample B
3 sample C
3 sample D
3 sample E
3 sample G
3 control B
4 sample A
4 sample B
4 sample C
4 sample G
4 sample J
4 sample K
5 control NA
Description这是我数据集的基本示例。在此示例中,我想保留ID 2和3的所有行,因为它们包含一个样本和一个对照。而样品1和4不包含控件,因此我目前不需要分析它们。诸如ID 5之类的示例是独立的控件,与其他样品配对,我也不希望其中包括这些。
I打算比较配对样品和对照组的结果。问题在于,配对ID在一个较大的数据集内,该数据集非常大,配对的样本/对照组不到整个数据集的10%。
我不是要随机对该数据集进行采样,也不是像堆栈上的其他许多问题那样保留1行。只是为了将其清洗到我保留符合下面IF语句标准的每一行,并删除所有不符合该条件的观察结果。例如,排除没有控件的样本或没有与样本相关的独立控件的样本。data2<- data %>%
select(ID, Sample_Type, Species) %>%
filter(if (data$Sample_Type = "Control" & "Sample") {SiteID = TRUE})
对于过滤,您可以检查
"sample"
"control"
是否存在于
ID
组中,all()
检查所有左侧操作数是否存在于%in%
在每个ID组中检查。 .by
处理输入数据中的不同资本化。
tolower()
示例数据:data |>
dplyr::filter(all(c("sample", "control") %in% tolower(Sample_Type)), .by = ID)
#> ID Sample_Type Species
#> 1 2 Sample A
#> 2 2 Sample B
#> 3 2 Sample C
#> 4 2 Sample D
#> 5 2 Sample E
#> 6 2 Sample F
#> 7 2 control <NA>
#> 8 3 sample B
#> 9 3 sample C
#> 10 3 sample D
#> 11 3 sample E
#> 12 3 sample G
#> 13 3 control B