根据R中的几个条件保留行

根据R中的几个条件保留行,r,dplyr,tibble,R,Dplyr,Tibble,给定以下data.frame: 名为t2的数据帧如下所示: # A tibble: 6 x 6 # Groups: rs. [3] rs. marker n prop BASE alleles <chr> <chr> <int> <dbl> <chr> <chr> 1 S1A_494392059 0 653 0.299 C C/G

给定以下data.frame:

名为t2的数据帧如下所示:

# A tibble: 6 x 6
# Groups:   rs. [3]
   rs.           marker     n  prop BASE  alleles
  <chr>         <chr>  <int> <dbl> <chr> <chr>  
  1 S1A_494392059 0        653 0.299 C     C/G    
  2 S1A_494392059 2       1463 0.670 C     C/G    
  3 S1A_497201550 0        943 0.432 C     C/T    
  4 S1A_497201550 2       1110 0.508 C     C/T    
  5 S1A_499864157 0        960 0.440 T     C/T    
  6 S1A_499864157 2       1100 0.504 T     C/T    
我真的希望有一个简洁的方法来实现以下条件:

如果t2$碱基等于t2$等位基因的第一个字符串,请将等于2的t2$标记子集。否则,如果t2$碱基等于t2$等位基因的第三个字符串,请将等于0的t2$标记子集。这样,通过按行方式应用条件,所需数据帧的行数应为初始数据帧的一半。

可以尝试:

library(dplyr)

t2 %>%
  group_by(rs.) %>%
  filter(
    BASE == substr(alleles, 1, 1) & marker == 2 |
    BASE == substr(alleles, 3, 3) & marker == 0
  )

谢谢你能解释一下。。。{…}在if和else if表示中?我正在学习R它们代表一个条件-如果它的计算结果为真,那么接下来的任何内容都将被执行,否则它将继续执行else或else如果。。另一方面,在您的情况下,这实际上没有那么重要-请参阅我的编辑和第一种方法,这将是一种更真实的dplyr方法第一种解决方案的语法很好,没有抛出任何警告消息,而第二种解决方案给了我一些警告消息。但这两种方法都能解决问题,谢天谢地,实际上,你应该使用第一种方法。很高兴这有帮助。
library(dplyr)

t2 %>%
  group_by(rs.) %>%
  filter(
    BASE == substr(alleles, 1, 1) & marker == 2 |
    BASE == substr(alleles, 3, 3) & marker == 0
  )