根据R中的几个条件保留行
给定以下data.frame: 名为t2的数据帧如下所示:根据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
# 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
)