소셜 네트워크 분석과 함께 특정 변수의 빈도를 분석하고자하므로 횡단면 데이터를 인접성 매트릭스로 변환하려고합니다. 경험적인 예가 논리에 도움이되는 경우 기본적으로 3 명으로 구성된 4 명에게 제시하는 것과 유사합니다. 0 ~ 3 개의 객체 중에서 선택할 수 있습니다. 나는 서로 다른 물체가 얼마나 일반적으로 선택되었는지 분석하고이를 선호도의 네트워크로 시각화하고 싶습니다.횡단면 데이터를 인접성 매트릭스로 변환 R
는 데이터를 아래의 단면 데이터로 설정된다
ID1 <- c(1,0,0)
ID2 <- c(1,0,1)
ID3 <- c(1,1,1)
ID4 <- c(0,0,0)
IDs <- c("1","2","3","4")
df <- data.frame(rbind(ID1, ID2, ID3, ID4))
df <- cbind(IDs, df)
colnames(df) <- c("ID", "Var1", "Var2", "Var3")
I는 총 횟수를 포함하는 각각의 셀과, VAR1, 변수 2를 대입 할 때 변수 및 VAR3 대한 가중 인접 행렬을 만들려
두 변수는 관측치 사이에서 함께 발생한다.
그래서 내가 생각한 기본 절차는 각 셀에 대해 1 또는 0으로 각 행 (각 ID 번호)에 대해 별도의 행렬을 만들어 두 변수가 ID에 대해 존재하는지 여부를 나타냅니다. 그리고 나서이 행렬들을 합쳐서, 최종 행렬은 총 출현 수를 얻습니다.
나는 주변을 둘러 보았고 제대로 얻지 못했습니다. 나는 outer를 사용하는 것을 생각했지만 순서대로 각 컬럼에 대해 작업해야했다. 이 답변은 꽤 가까웠지만 정확하게 어떻게 값을 합산했는지는 정확히 알 수 없었습니다. 결국 행렬 목록으로 끝났지 만 그 값은 초기 데이터와 일치하지 않습니다. Convert categorical data in data frame to weighted adjacency matrix. 그리고이 답변은 다른 유형의 데이터를 갖고있는 것처럼 보였지만 가까웠습니다. 그것은 나에게 ID를 기반으로 한 인접 매트릭스를 주었다. http://r.789695.n4.nabble.com/Conversion-to-Adjacency-Matrix-td794102.html
하나의 관측을 위해 수동으로 행렬을 생성하는 코드는 매우 복잡하여 그냥 내가 표현하고자하는 것에 대한 감각을 얻는다. 첫 번째 ID 관찰) 분명히
ID1 <- c(1,0,0)
var1 <- ID1[[1]]
var2 <- ID1[[2]]
var3 <- ID1[[3]]
onetwo <- var1 * var2
onethree <- var1 * var3
twothree <- var2 * var3
oneone <- var1 * var1
twotwo <- var2 * var2
threethree <- var3 * var3
rows1 <- rbind(oneone, onetwo, onethree)
rows2 <- rbind(onetwo, twotwo, twothree)
rows3 <- rbind(onethree, twothree, threethree)
df2 <- cbind(rows1, rows2, rows3)
이 적합하지 않습니다, 내 실제 데이터 세트는 198 명 관찰과 33 개 변수가 너무도 루프 또는 적용 기능의 사용으로 매우 비효율적이다.
내가 필요로하는 것보다 더 어렵게 만들고 있는지, 내 데이터가 무언가를하도록 강요하려는 경우 그럴 의도가 없다는 것을 알 수 없습니다. 그러나 누군가가 이전에 이런 종류의 과제에 부딪혔다면 알려 주시기 바랍니다. 원하는 인접성 매트릭스를 직접 생성하는 방법이 있습니까? 먼저 이것을 가장자리 목록으로 옮겨야합니까? 그렇게 할 수있는 좋은 방법이 있습니까? 첫 번째 단계 (데이터 프레임의 각 행에 대한 행렬 생성)를보다 효율적으로 수행 할 수있는 코드가 있습니까?
감사합니다.
0이면 동일한 결과를 제공하는 제품의 합을 원하는 경우. 첫 번째 옵션은 시뮬레이트 된 데이터를 사용하지는 않지만 내 데이터를 사용하여 t3 [2,2] 명령에 대한 "subscript out of bounds 오류"를 표시했습니다. 그러나 두 번째 버전 (m3c)이 효과가 있었고 제 데이터는 양이 많아서 훌륭했습니다. 도움을 주셔서 대단히 감사합니다. – PSR
@ user3830805이 질문에 답하면 다른 사람이 응답하지 않도록 체크 표시를해야합니다. 대답이 유익했다면, 위쪽 화살표를 클릭하십시오. –