ubset数据仅将配对的示例ID保留在具有未配对样本的较大数据集中(CONTOL = 1行,样本= 10+行,但共享一个ID)

问题描述 投票:0回答:1

输入图像描述在这里

我的数据集的外观

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"
r dplyr subset
1个回答
0
投票
"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

	

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.