Как установить подмножество данных, используя несколько символов в столбце - PullRequest
2 голосов
/ 22 февраля 2012

Это очень простой вопрос.

У меня длинный набор данных, и я хочу создать подмножество на основе определенных записей в определенном столбце. В этом случае я настраиваю его так:

Пример данных:

> 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).

Что я делаю не так?

Ответы [ 2 ]

5 голосов
/ 22 февраля 2012

Наиболее очевидная ошибка - использование "=", когда вы имеете в виду "==". Но я думаю, из контекста, что вы действительно хотите «разделить» эти данные:

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
0 голосов
/ 22 февраля 2012

= используется для передачи аргументов или для присваивания.Что вам нужно, это проверить, является ли что-то правдой, используйте ==.Вы также проходите несколько критериев и не указываете, как следует комбинировать.Я почти уверен, что вам нужно подмножество, в котором любое из этих условий истинно (не все ), а 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% вышеэто как сокращение для этого.

...