2017-01-20 10 views
1

У меня есть матрица, где первая колонка - это идентификатор образцов, столбцы с 2 по 15 - наблюдаемые присутствия 14 видов рыб, а столбцы 16 до 29 - предсказанные присутствия тех же 14 видов.Мне нужно построить новые матрицы, выбрав альтернативные столбцы исходной матрицы

Мне нужно построить 14 матриц (по одному на каждого вида) по 3 столбца: первый столбец = идентификатор образцов (например, столбец 1 исходной матрицы), 2-й столбец = наблюдаемое присутствие вида, 3-й столбец = предсказано наличие вида.

Допустим, что А является идентификатором моих образцов:

A<-c(1,2,3,4,5,6,7,8,9,10)

В имеют наблюдаемые значения для моего вида

B<-replicate(14,rnorm(10))

C являются предсказанные значения для моего вида

C<-replicate(14,rnorm(10))

Так что у меня матрица "данные":

data<-cbind(A, B, C)

Я хочу сделать что-то вроде этого

A1<-cbind(data[,1],data[,2],data[,16]) A2<-cbind(data[,1],data[,3],data[,17])

и т.д .. до тех пор, имеющий от A1 до A14 матриц, одна для каждого вида. Я подозреваю, что мне нужно использовать функцию lapply, но я потерян. Может кто-нибудь мне помочь?

Спасибо!

ответ

0

Мы можем использовать lapply создать list из matrices обернув через последовательность столбцов

lst <- lapply(seq_len(ncol(B)), function(i) cbind(A, B= B[,i], C=C[,i])) 
names(lst) <- paste0("A", seq_along(lst)) 

Лучше держать его в list вместо создания нескольких объектов в глобальной среде. Но, если нам это нужно, все равно

list2env(lst, .GlobalEnv) 

 Смежные вопросы

  • Нет связанных вопросов^_^