|
大家好,
我最近在学习apply系列的编程,书中介绍apply函数运行更快,可以代替for循环,我的问题:
geno为10行20列的数据框,我想将其变为10行10列,即第一列和第二列合并,第三列和第四列合并,以此类推。
geno:
- > geno
- [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13] [,14] [,15] [,16] [,17] [,18] [,19] [,20]
- [1,] 3 9 9 9 2 1 6 7 3 2 6 9 6 6 3 8 5 6 8 3
- [2,] 8 5 7 9 4 4 1 6 7 6 3 3 3 9 4 5 4 2 3 3
- [3,] 4 7 6 7 4 8 4 7 4 4 5 1 3 7 1 4 6 8 7 9
- [4,] 8 6 9 8 4 2 3 1 8 6 9 9 2 7 2 3 4 7 3 6
- [5,] 9 1 6 1 2 6 8 5 1 3 5 7 4 5 8 1 4 7 6 9
- [6,] 1 9 7 5 2 2 5 2 4 2 9 2 9 6 3 4 5 6 5 5
- [7,] 5 3 5 7 3 2 8 4 9 8 9 5 2 8 3 6 7 4 3 4
- [8,] 9 1 6 2 5 7 8 6 9 1 6 9 1 8 1 2 2 5 6 6
- [9,] 5 3 3 3 3 9 8 4 8 5 4 6 2 9 3 5 4 8 9 2
- [10,] 5 9 2 3 8 4 4 2 2 5 2 4 7 4 7 2 3 6 9 6
复制代码
想变为:
- > X
- [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
- [1,] "39" "99" "21" "67" "32" "69" "66" "38" "56" "83"
- [2,] "85" "79" "44" "16" "76" "33" "39" "45" "42" "33"
- [3,] "47" "67" "48" "47" "44" "51" "37" "14" "68" "79"
- [4,] "86" "98" "42" "31" "86" "99" "27" "23" "47" "36"
- [5,] "91" "61" "26" "85" "13" "57" "45" "81" "47" "69"
- [6,] "19" "75" "22" "52" "42" "92" "96" "34" "56" "55"
- [7,] "53" "57" "32" "84" "98" "95" "28" "36" "74" "34"
- [8,] "91" "62" "57" "86" "91" "69" "18" "12" "25" "66"
- [9,] "53" "33" "39" "84" "85" "46" "29" "35" "48" "92"
- [10,] "59" "23" "84" "42" "25" "24" "74" "72" "36" "96
复制代码
我低效的代码如下:
- set.seed(123)
- geno <- matrix(sample(x=c(1:9),size = 10*20,replace = T),10,20)
- geno
- hebing <- function(geno){
- X <- matrix(0,dim(geno)[1],dim(geno)[2]/2)
-
- for(i in 1:dim(X)[2]){
- X[,i] <- paste(geno[,c(2*i-1)],geno[,2*i],sep = "")
- }
- return(X)
- }
- result <- hebing(geno)
- result
复制代码
我的问题:
有没有更快的方法,比如我有300000列这样的数据,上面的代码就运行很慢,我想用apply或者更高效的方法。
十分感谢!
|