如何使用列中的多个字符对数据进行子集化

mfk*_*534 2 r subset dataformat

这是一个非常简单的问题.

我有一个冗长的数据集,并希望根据特定列中的某些条目创建一个子集.在这种情况下,我这样设置:

示例数据:

> NL

SNP alleles

rs1234 A_T

rs1235 A_G

rs2343 A_T

rs2342 G_C

rs1134 C_G

rs1675 T_A

rs8543 A_T

rs2842 G_A

P <- subset(NL, alleles = "A_T", alleles = "T_A", alleles = "G_C", alleles = "C_G")
Run Code Online (Sandbox Code Playgroud)

这样运行没有错误,但是得到的P不是任何方式的子集(P的尾部仍然显示与原始NL相同的条目数).

我究竟做错了什么?

42-*_*42- 5

当你的意思是"=="时,最明显的错误是使用"=".但我从上下文猜测你真的想"拆分"这些数据:

split(NL, NL$alleles)
Run Code Online (Sandbox Code Playgroud)

这将创建一个数据框列表,每个数据框都有一个值alleles.

但也许你想要使用模式匹配:

NL[ grepl("C_G|G_C|A_T|T_A", NL$alleles), ]
     SNP alleles
1 rs1234     A_T
3 rs2343     A_T
4 rs2342     G_C
5 rs1134     C_G
6 rs1675     T_A
7 rs8543     A_T
Run Code Online (Sandbox Code Playgroud)

并用我的想法说明你的评论 - 例子:

P <- read.table(text="V1 V2 V3 V4 V5 V6 alleles
 15116 25 rsX 0 123412 G A G_A 
15117 25 rsX1 0 23432 A C A_C 
15118 25 rsX2 0 234324 A G A_G 
15119 25 rsX3 0 3423 A G A_G 
15120 25 rsX4 0 2343223 C A C_A 
15121 25 rsX5 0 23523423 A G A_G", header=TRUE)

 P[ grepl("G_A", NL$alleles), ]

#       V1       V2 V3        V4 V5 V6 alleles
# 15116 25 rs306910  0 154613671  G  A     G_A
Run Code Online (Sandbox Code Playgroud)

子集版本:

 subset(P, alleles %in% c("G_A", "A_G") )

      V1   V2 V3       V4 V5 V6 alleles
15116 25  rsX  0   123412  G  A     G_A
15118 25 rsX2  0   234324  A  G     A_G
15119 25 rsX3  0     3423  A  G     A_G
15121 25 rsX5  0 23523423  A  G     A_G
Run Code Online (Sandbox Code Playgroud)