如何基于多个条件对数据进行子集

时间:2019-05-23 15:41:52

标签: r bioinformatics

我正在寻找一个基因数据集的子集,根据其机器学习类别(标签0-2)及其位点/ rssnp ID选择基因。

我的数据如下:

Chr  Start   End     rssnp1        Type    gene     ML.prediction
1   1244733 1244734 rs2286773   LD_SNP  ACE                0
1   1257536 1257436 rs333333    LD_SNP  CPEB4              1
1   1252336 1252336 rs2286773   Sentinel    CPEB4          2
1   1252343 1252343 rs333333    LD_SNP  CPEB4              0
1   1254841 1254841 rs333333    LD_SNP  BRCA2              3
1   1256703 1267404 rs444444    LD_SNP  HER2               0
1   1269246 1269246 rs301159    LD_SNP  CPEB4              1
1   1370168 1370168 rs301159    LD_SNP  GLUT2              0 
1   1371824 1371824 r4444444    LD_SNP  GLUPA1             1
1   1372591 1372591 rs111111    LD_SNP  GLUPA1             1
1   1372591 1372591 rs111111    LD_SNP  GLUPA2             1
1   1372591 1372591 rs111111    LD_SNP  GLUPA3             1

我的输出将是这样的:

Chr  Start   End     rssnp1        Type    gene     ML.prediction
1   1244733 1244734 rs2286773   LD_SNP  ACE                0
1   1252336 1252336 rs2286773   Sentinel    CPEB4          2
1   1257536 1257436 rs333333    LD_SNP  CPEB4              1
1   1252343 1252343 rs333333    LD_SNP  CPEB4              0
1   1254841 1254841 rs333333    LD_SNP  BRCA2              3
1   1269246 1269246 rs301159    LD_SNP  CPEB4              1
1   1370168 1370168 rs301159    LD_SNP  GLUT2              0
1   1256703 1267404 rs444444    LD_SNP  HER2               0 
1   1371824 1371824 r4444444    LD_SNP  GLUPA1             1

因此,它仅选择预测为0的基因,然后根据匹配的rssnp1选择该基因的周围基因。

我尝试使用lapply()和order,但是我是一个初学者,正在努力使所有东西都无法工作,因此有关应该使用什么功能或如何在lapply()中设置条件的任何指导都将是感谢。

当前,我正在工作,在excel中将每个基因的所有rssnp1预测为0,然后使用

order <- df[order(match(df$rssnp1, target_order)),] 

目标订单是我手动输入数百个rssnp1 id,但是有什么方法比这更快吗?

2 个答案:

答案 0 :(得分:2)

我将执行两步选择:

  1. 找到预测为0的变体:

    prediction_snps = df$rssnp1[df$ML.prediction == 0]
    
  2. 基于SNP细分数据:

    result = df[df$rssnp1 %in% prediction_snps, ]
    

您还可以使用dplyr或data.table获得类似的结果。无论哪种方式,这里都不需要lapplyorder,它们并没有真正的帮助。

答案 1 :(得分:2)

请注意,您的示例数据似乎存在错误,其中rs444444r4444444不同;因此预期的输出与您的输入数据不匹配。

此外,这是一个dplyr选项

df %>%
    group_by(rssnp1) %>%
    filter(any(ML.prediction == 0)) %>%
    ungroup()
## A tibble: 8 x 7
#    Chr   Start     End rssnp1    Type     gene  ML.prediction
#  <int>   <int>   <int> <fct>     <fct>    <fct>         <int>
#1     1 1244733 1244734 rs2286773 LD_SNP   ACE               0
#2     1 1257536 1257436 rs333333  LD_SNP   CPEB4             1
#3     1 1252336 1252336 rs2286773 Sentinel CPEB4             2
#4     1 1252343 1252343 rs333333  LD_SNP   CPEB4             0
#5     1 1254841 1254841 rs333333  LD_SNP   BRCA2             3
#6     1 1256703 1267404 rs444444  LD_SNP   HER2              0
#7     1 1269246 1269246 rs301159  LD_SNP   CPEB4             1
#8     1 1370168 1370168 rs301159  LD_SNP   GLUT2             0

说明:按rssnp1对条目进行分组,然后仅保留至少一个条目具有ML.prediction == 0的那些组。


样本数据

df <- read.table(text =
    "Chr  Start   End     rssnp1        Type    gene     ML.prediction
1   1244733 1244734 rs2286773   LD_SNP  ACE                0
1   1257536 1257436 rs333333    LD_SNP  CPEB4              1
1   1252336 1252336 rs2286773   Sentinel    CPEB4          2
1   1252343 1252343 rs333333    LD_SNP  CPEB4              0
1   1254841 1254841 rs333333    LD_SNP  BRCA2              3
1   1256703 1267404 rs444444    LD_SNP  HER2               0
1   1269246 1269246 rs301159    LD_SNP  CPEB4              1
1   1370168 1370168 rs301159    LD_SNP  GLUT2              0
1   1371824 1371824 r4444444    LD_SNP  GLUPA1             1
1   1372591 1372591 rs111111    LD_SNP  GLUPA1             1
1   1372591 1372591 rs111111    LD_SNP  GLUPA2             1
1   1372591 1372591 rs111111    LD_SNP  GLUPA3             1", header = T)