这是一个非常简单的问题。
我有一个冗长的数据集,想要根据特定列中的某些条目创建一个子集。在这种情况下,我这样设置:
示例数据:
> 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")
这样运行没有错误,但是得到的P不是任何方式的子集(P的尾部仍然显示与原始NL相同的条目数)。
我做错了什么?
答案 0 :(得分:5)
最明显的错误是使用“=”表示“==”。但我从上下文猜测你真的想要“拆分”这些数据:
split(NL, NL$alleles)
这将创建一个数据框列表,每个数据框都具有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
用我的想法说明你的评论 - 例子:
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
子集版本:
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
答案 1 :(得分:0)
=
用于传递参数或赋值。你需要的是测试某些事情是否属实,使用==
。您还传递了多个条件,而没有指定应该如何组合。我很确定你想要那些任何这些条件的子集是真的(不是所有),但R不是。对于这种情况,您可以使用%in%
运算符:
P <- subset(NL, alleles %in% c("A_T", "T_A", "C_G"))
另请注意,您尝试给出subset
几个条件,但您没有告诉它如何将它们组合在一起。我可以看到你想要任何条件为真的行,但是你必须告诉R使用OR运算符|
,例如
P <- subset(NL, alleles == "A_T" | alleles == "T_A" | alleles == "C_G")
上面的%in%
运算符就像是一个简写。