Объединение 2 столбцов в 1 столбец много раз в очень большом наборе данных в R - PullRequest
5 голосов
/ 28 февраля 2010

Объединение 2 столбцов в 1 столбец много раз в очень большом наборе данных в R

Неуклюжие решения, над которыми я работаю, не будут очень быстрыми, если я смогу заставить их работать, и истинный набор данных ~ 1500 X 45000, поэтому они должны быть быстрыми. Я определенно в недоумении для 1) на данный момент, хотя есть некоторый код для 2) и 3).

Вот игрушечный пример структуры данных:

pop = data.frame(status = rbinom(n, 1, .42), sex = rbinom(n, 1, .5),
age = round(rnorm(n, mean=40, 10)), disType = rbinom(n, 1, .2),
rs123=c(1,3,1,3,3,1,1,1,3,1), rs123.1=rep(1, n), rs157=c(2,4,2,2,2,4,4,4,2,2),
rs157.1=c(4,4,4,2,4,4,4,4,2,2),  rs132=c(4,4,4,4,4,4,4,4,2,2),
rs132.1=c(4,4,4,4,4,4,4,4,4,4))

Таким образом, есть несколько столбцов базовой демографической информации, а затем остальные столбцы являются двуаллельной информацией SNP. Например: rs123 является аллелем 1 rs123, а rs123.1 является вторым аллелем rs123.

1) Мне нужно объединить все двуслойные данные SNP, которые в настоящее время находятся в 2 столбцах, в 1 столбец, например, rs123 и rs123.1 в один столбец (но внутри набора данных):

11
31
11
31
31
11
11
11
31
11

2) Мне нужно определить наименее частое значение SNP (в приведенном выше примере оно равно 31).

3) Мне нужно заменить наименее частое значение SNP на 1, а другие значения на 0.

1 Ответ

8 голосов
/ 28 февраля 2010

Вы имеете в виду «объединить» или «переставить» или просто объединить? Если это последнее, то

R> pop2 <- data.frame(pop[,1:4], rs123=paste(pop[,5],pop[,6],sep=""), 
+                                rs157=paste(pop[,7],pop[,8],sep=""), 
+                                rs132=paste(pop[,9],pop[,10], sep=""))
R> pop2
   status sex age disType rs123 rs157 rs132
1       0   0  42       0    11    24    44
2       1   1  37       0    31    44    44
3       1   0  38       0    11    24    44
4       0   1  45       0    31    22    44
5       1   1  25       0    31    24    44
6       0   1  31       0    11    44    44
7       1   0  43       0    11    44    44
8       0   0  41       0    11    44    44
9       1   1  57       0    31    22    24
10      1   1  40       0    11    22    24

и теперь вы можете делать подсчеты и еще много чего на pop2:

R> sapply(pop2[,5:7], table)
$rs123

11 31 
 6  4 

$rs157

22 24 44 
 3  3  4 

$rs132

24 44 
 2  8 

R> 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...