미리 사과드립니다.이 질문에 제목을 붙이기가 어려웠습니다. 열과 행이 종을 나타내는 종 상호 작용 행렬이 있고 행렬 채우기는 상호 작용의 빈도입니다.
matrix<- 2A 2B 2C
1A 1 2 4
1B 0 1 1
1C 5 4 1
다음 형식으로 행렬을 만들고 싶습니다.
mat<-
comm
1A_2A 1
1A_2B 2
1A_2C 4
1B_2A 0
1B_2B 1
1B_2C 1
1C_2A 5
1C_2B 4
1C_2C 1
종 상호 작용이 행이되고 열은 임의의 변수가 될 수 있지만 매트릭스 채우기는 상호 작용의 빈도로 남아 있고 구조는 매트릭스로 남아 있습니다. 이런 식으로 행렬은 커뮤니티 x 종 행렬의 형태를 취합니다. 나는이 방법으로 매트릭스를 붕괴 및 매트릭스 형태를 유지하려는 이유에서 함수의 사용을 가능하게하는 library(vegetarian)
등의 d()
매트릭스 형태를 필요로한다.
사용 :
m2 <- matrix(t(m1))
dimnames(m2) <- list(paste(rep(rownames(m1), each = nrow(m1)),
colnames(m1), sep = '_'),
'comm')
제공합니다 :
> m2 comm 1A_2A 1 1A_2B 2 1A_2C 4 1B_2A 0 1B_2B 1 1B_2C 1 1C_2A 5 1C_2B 4 1C_2C 1
이것이하는 일 :
c(m1)
. 이것은 첫 번째 열의 값을 가진 벡터를 먼저 제공하고 두 번째 열의 값을 제공합니다. 행 순서로 값을 얻으려면을 사용하여 행렬을 전치 할 수 있습니다 t(m1)
.matrix
하면 열 또는 행 수가 지정되지 않은 경우 기본 동작 인 1 열 행렬을 얻을 수 있습니다. 결과적으로 matrix(t(m1))
는 matrix(t(m1), ncol = 1)
.paste(rep(rownames(m1), each = nrow(m1)), colnames(m1), sep = '_')
및 열 이름 ( 'comm
)) 이있는 길이 2의 목록을 만들고에 할당합니다 dimnames
. 새 행 이름은 각 행 이름 m1
을 열 수만큼 반복 m1
하고 열 이름의 벡터로 붙여 넣는 방식으로 생성됩니다. (재활용됩니다).열 순서로 값을 원하는 경우 위 코드를 다음과 같이 조정할 수 있습니다.
m2 <- matrix(m1)
dimnames(m2) <- list(paste(rownames(m1),
rep(colnames(m1), each = ncol(m1)), sep = '_'),
'comm')
동일한 결과를 제공하지만 순서가 다릅니다.
> m2 comm 1A_2A 1 1B_2A 0 1C_2A 5 1A_2B 2 1B_2B 1 1C_2B 4 1A_2C 4 1B_2C 1 1C_2C 1
또는 reshape2
-package를 사용할 수도 있습니다 .
library(reshape2)
d1 <- melt(m1)
rownames(d1) <- paste(d1$Var1, d1$Var2, sep = '_')
d1 <- d1[, 3, drop = FALSE]
데이터 프레임을 반환합니다.
> d1 value 1A_2A 1 1B_2A 0 1C_2A 5 1A_2B 2 1B_2B 1 1C_2B 4 1A_2C 4 1B_2C 1 1C_2C 1
매트릭스를 얻으려면, 당신은 단지 포장 할 수 d1
있는 as.matrix
: as.matrix(d1)
.
사용 된 데이터 :
m1 <- matrix(c(1,2,4,0,1,1,5,4,1), ncol = 3, byrow = TRUE,
dimnames = list(c('1A','1B','1C'),c('2A','2B','2C')))
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다