Объединение 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))
Таким образом существует несколько столбцов основной демографической информации, и затем остальная часть столбцов является biallelic информацией о SNP. Исключая: rs123 является аллелью, 1 из rs123 и rs123.1 является второй аллелью rs123.
1) Я должен объединить все biallelic данные SNP, которые в настоящее время находятся в 2 столбцах в 1 столбец, таким образом, например: rs123 и rs123.1 в один столбец (но в наборе данных):
11
31
11
31
31
11
11
11
31
11
2) Я должен определить наименее частое значение SNP (в вышеупомянутом примере, который это 31).
3) Я должен заменить наименее частое значение SNP 1 и другой (s) с 0.
Вы имеете в виду «объединить», «переставить» или просто объединить? Если последнее, то
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>