데이터 테이블 또는 igraph를 사용하여 그룹별로 인접 이웃 찾기

사용자 2321

나는이 data.table를 :

groups <- data.table(group = c("A", "B", "C", "D", "E", "F", "G"), 
                     code_1 = c(2,2,2,7,8,NA,5),
                     code_2 = c(NA,3,NA,3,NA,NA,2),
                     code_3 = c(4,1,1,4,4,1,8))

group code_1 code_2 code_3
  A      2     NA      4
  B      2      3      1
  C      2     NA      1
  D      7      3      4
  E      8     NA      4
  F     NA     NA      1
  G      5      2      8

내가 달성하고 싶은 것은 각 그룹이 사용 가능한 코드를 기반으로 인접 이웃을 찾는 것입니다. 예 : 그룹 A에는 code_1 (code_1은 모든 그룹에서 2와 같음)으로 인해 바로 이웃 그룹 B, C가 있고 code_3 (모든 그룹에서 code_3은 4와 같음)으로 인해 바로 이웃 그룹 D, E가 있습니다.

내가 시도한 것은 각 코드에 대해 다음과 같이 일치 항목을 기반으로 첫 번째 열 (그룹)을 부분 집합 화하는 것입니다.

groups$code_1_match = list()
for (row in 1:nrow(groups)){

  set(groups, i=row, j="code_1_match", list(groups$group[groups$code_1[row] == groups$code_1]))
}

  group code_1 code_2 code_3          code_1_match
    A      2     NA      4              A,B,C,NA
    B      2      3      1              A,B,C,NA
    C      2     NA      1              A,B,C,NA
    D      7      3      4                  D,NA
    E      8     NA      4                  E,NA
    F     NA     NA      1 NA,NA,NA,NA,NA,NA,...
    G      5      2      8                  NA,G

이 "종류"는 작동하지만이 작업을 수행하는 데 더 많은 데이터 테이블이 있다고 가정합니다. 나는 시도했다

groups[, code_1_match_2 := list(group[code_1 == groups$code_1])]

그러나 이것은 작동하지 않습니다.

나는 그것을 처리하기 위해 명백한 데이터 테이블 트릭을 놓치고 있습니까?

내 이상적인 경우 결과는 다음과 같습니다 (현재 3 개 열 모두에 대해 내 방법을 사용한 다음 결과를 연결해야 함).

group code_1 code_2 code_3    Immediate neighbors
  A      2     NA      4         B,C,D,E
  B      2      3      1         A,C,D,F
  C      2     NA      1         A,B,F
  D      7      3      4           B,A
  E      8     NA      4           A,D
  F     NA     NA      1           B,C
  G      5      2      8           
zx8754

igraph를 사용하여 2 차 이웃을 가져 오고 숫자 노드를 삭제하고 나머지 노드를 붙여 넣습니다.

library(data.table)
library(igraph)

# reshape wide-to-long
x <- melt(groups, id.vars = "group")[!is.na(value)]

# convert to graph
g <- graph_from_data_frame(x[, .(from = group, to = paste0(variable, "_", value))])

# get 2nd degree neighbours
x1 <- ego(g, 2, nodes = groups$group)

# prettify the result
groups$res <- sapply(seq_along(x1), function(i) toString(intersect(names(x1[[ i ]]),
                                                                   groups$group[ -i ])))

#    group code_1 code_2 code_3        res
# 1:     A      2     NA      4 B, C, D, E
# 2:     B      2      3      1 A, C, D, F
# 3:     C      2     NA      1    A, B, F
# 4:     D      7      3      4    B, A, E
# 5:     E      8     NA      4       A, D
# 6:     F     NA     NA      1       B, C
# 7:     G      5      2      8           

더 많은 정보

이것이 igraph 객체로 변환하기 전에 데이터가 어떻게 보이는지입니다. 우리는 값이 2 인 code1이 값이 2 인 code2와 다른지 확인하려고합니다.

x[, .(from = group, to = paste0(variable, "_", value))]
#     from       to
#  1:    A code_1_2
#  2:    B code_1_2
#  3:    C code_1_2
#  4:    D code_1_7
#  5:    E code_1_8
#  6:    G code_1_5
#  7:    B code_2_3
#  8:    D code_2_3
#  9:    G code_2_2
# 10:    A code_3_4
# 11:    B code_3_1
# 12:    C code_3_1
# 13:    D code_3_4
# 14:    E code_3_4
# 15:    F code_3_1
# 16:    G code_3_8

네트워크의 모습은 다음과 같습니다. 여기에 이미지 설명 입력

참고 A..G노드가 항상를 통해 연결되어있다 code_x_y. 그래서 우리는 2 차를 얻어야하고 2 차 ego(..., order = 2)이웃을 포함하여 이웃을 제공하고 목록 객체를 반환해야합니다.

이름을 얻으려면 :

lapply(x1, names)
# [[1]]
# [1] "A"        "code_1_2" "code_3_4" "B"        "C"        "D"        "E"       
# 
# [[2]]
# [1] "B"        "code_1_2" "code_2_3" "code_3_1" "A"        "C"        "D"        "F"       
# 
# [[3]]
# [1] "C"        "code_1_2" "code_3_1" "A"        "B"        "F"       
# 
# [[4]]
# [1] "D"        "code_1_7" "code_2_3" "code_3_4" "B"        "A"        "E"       
# 
# [[5]]
# [1] "E"        "code_1_8" "code_3_4" "A"        "D"       
# 
# [[6]]
# [1] "F"        "code_3_1" "B"        "C"       
# 
# [[7]]
# [1] "G"        "code_1_5" "code_2_2" "code_3_8"

결과를 예쁘게하기 위해 code_x_y노드와 원래 노드 (첫 번째 노드) 를 제거해야합니다.

sapply(seq_along(x1), function(i) toString(intersect(names(x1[[ i ]]), groups$group[ -i ])))
#[1] "B, C, D, E" "A, C, D, F" "A, B, F"    "B, A, E"    "A, D"       "B, C"       ""   

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

Pandas 데이터 세트를 사용하여 기능별로 그룹화합니다. Python에서 그룹화 된 데이터 세트가있는 Cronbach의 알파

분류에서Dev

Gmail 로그인 사용자를 기반으로 HTML 테이블 데이터를 필터링하는 방법

분류에서Dev

laravel을 사용하여 기본 테이블 또는 뷰를 찾을 수없는 데이터베이스 테이블을 수정하는 방법

분류에서Dev

MySQL은 REGEXP 또는 LIKE를 사용하여 데이터베이스 별칭으로 테이블 이름 선택

분류에서Dev

PHP를 사용하여 이름별로 그룹화 된 테이블에 SQL 결과를 표시하는 방법

분류에서Dev

PHP를 사용하여 값별로 JSON 데이터 그룹화

분류에서Dev

그룹별로 (첫 번째 행의 값 + X)를 기반으로 데이터 테이블을 하위 집합으로 만드는 방법

분류에서Dev

jquery 정의를 사용하여 데이터 테이블 플러그인 기반 그리드에 사용자 정의 링크 버튼을 추가하는 방법

분류에서Dev

linq 쿼리를 사용하여 데이터 테이블을 기준으로 그룹화

분류에서Dev

AngularJS의 $ 필터를 사용하여 연도 및 월별로 데이터를 그룹화하는 방법

분류에서Dev

mondoDB 문서 데이터를 분기 별 / 반기 별 타임 스탬프별로 그룹화하는 방법

분류에서Dev

h2 데이터베이스를 사용하여 테이블을 찾을 수 없습니까? 로그인은 logcat에서 찾을 수없는 테이블 이름입니까?

분류에서Dev

내부 조인, 별칭을 사용하여 두 테이블에서 데이터를 가져 오는 MySQL 쿼리

분류에서Dev

xpath를 사용하여 열 머리글로 테이블 찾기

분류에서Dev

작업 또는 스레드를 사용하여 빅 데이터 테이블 (Progress 데이터베이스)에서 행별로 데이터 그리드를 업데이트하지만 업데이트 중에 UI 응답 성을 유지합니다.

분류에서Dev

linq를 사용하여 빈 데이터 값이있는 날짜별로 그룹화

분류에서Dev

Linq에서 Group by를 사용하여 데이터 테이블의 배열 또는 Ienumerable 가져 오기

분류에서Dev

Logstash를 사용하여 두 개의 mysql 테이블에서 단일 Elasticsearch 인덱스로 데이터 동기화

분류에서Dev

Firebase에서 사용자 그룹별로 데이터를 분리하는 방법

분류에서Dev

복잡한 데이터가있는 R에서 igraph를 사용하여 그래프 만들기

분류에서Dev

인덱스 테이블을 사용하여 테이블에 데이터를 삽입하는 MYSQL

분류에서Dev

데이터 프레임별로 그룹화하고 그룹 찾기

분류에서Dev

SqlBulkCopy를 사용하여 데이터 테이블을 삽입하기 전에 데이터 테이블의 데이터를 검증하는 방법

분류에서Dev

팬더를 사용하여 그룹별로 데이터를 기반으로 열의 행을 빼는 방법은 무엇입니까?

분류에서Dev

조회 테이블에 데이터를 삽입하기위한 Phoenix 마이그레이션 또는 시드

분류에서Dev

PHP를 사용하여 for 루프를 사용하여 테이블에 데이터를 인쇄하는 방법

분류에서Dev

htmltab은 숫자 또는 문자형 벡터를 'which'인수로 사용하여 테이블을 찾을 수 없습니다.

분류에서Dev

ID별로 그룹화하여 목록에있는 데이터 프레임에서 날짜를 찾습니다.

분류에서Dev

Eloquent를 사용하여 테이블 B를 기반으로 테이블 A에서 데이터 검색

Related 관련 기사

  1. 1

    Pandas 데이터 세트를 사용하여 기능별로 그룹화합니다. Python에서 그룹화 된 데이터 세트가있는 Cronbach의 알파

  2. 2

    Gmail 로그인 사용자를 기반으로 HTML 테이블 데이터를 필터링하는 방법

  3. 3

    laravel을 사용하여 기본 테이블 또는 뷰를 찾을 수없는 데이터베이스 테이블을 수정하는 방법

  4. 4

    MySQL은 REGEXP 또는 LIKE를 사용하여 데이터베이스 별칭으로 테이블 이름 선택

  5. 5

    PHP를 사용하여 이름별로 그룹화 된 테이블에 SQL 결과를 표시하는 방법

  6. 6

    PHP를 사용하여 값별로 JSON 데이터 그룹화

  7. 7

    그룹별로 (첫 번째 행의 값 + X)를 기반으로 데이터 테이블을 하위 집합으로 만드는 방법

  8. 8

    jquery 정의를 사용하여 데이터 테이블 플러그인 기반 그리드에 사용자 정의 링크 버튼을 추가하는 방법

  9. 9

    linq 쿼리를 사용하여 데이터 테이블을 기준으로 그룹화

  10. 10

    AngularJS의 $ 필터를 사용하여 연도 및 월별로 데이터를 그룹화하는 방법

  11. 11

    mondoDB 문서 데이터를 분기 별 / 반기 별 타임 스탬프별로 그룹화하는 방법

  12. 12

    h2 데이터베이스를 사용하여 테이블을 찾을 수 없습니까? 로그인은 logcat에서 찾을 수없는 테이블 이름입니까?

  13. 13

    내부 조인, 별칭을 사용하여 두 테이블에서 데이터를 가져 오는 MySQL 쿼리

  14. 14

    xpath를 사용하여 열 머리글로 테이블 찾기

  15. 15

    작업 또는 스레드를 사용하여 빅 데이터 테이블 (Progress 데이터베이스)에서 행별로 데이터 그리드를 업데이트하지만 업데이트 중에 UI 응답 성을 유지합니다.

  16. 16

    linq를 사용하여 빈 데이터 값이있는 날짜별로 그룹화

  17. 17

    Linq에서 Group by를 사용하여 데이터 테이블의 배열 또는 Ienumerable 가져 오기

  18. 18

    Logstash를 사용하여 두 개의 mysql 테이블에서 단일 Elasticsearch 인덱스로 데이터 동기화

  19. 19

    Firebase에서 사용자 그룹별로 데이터를 분리하는 방법

  20. 20

    복잡한 데이터가있는 R에서 igraph를 사용하여 그래프 만들기

  21. 21

    인덱스 테이블을 사용하여 테이블에 데이터를 삽입하는 MYSQL

  22. 22

    데이터 프레임별로 그룹화하고 그룹 찾기

  23. 23

    SqlBulkCopy를 사용하여 데이터 테이블을 삽입하기 전에 데이터 테이블의 데이터를 검증하는 방법

  24. 24

    팬더를 사용하여 그룹별로 데이터를 기반으로 열의 행을 빼는 방법은 무엇입니까?

  25. 25

    조회 테이블에 데이터를 삽입하기위한 Phoenix 마이그레이션 또는 시드

  26. 26

    PHP를 사용하여 for 루프를 사용하여 테이블에 데이터를 인쇄하는 방법

  27. 27

    htmltab은 숫자 또는 문자형 벡터를 'which'인수로 사용하여 테이블을 찾을 수 없습니다.

  28. 28

    ID별로 그룹화하여 목록에있는 데이터 프레임에서 날짜를 찾습니다.

  29. 29

    Eloquent를 사용하여 테이블 B를 기반으로 테이블 A에서 데이터 검색

뜨겁다태그

보관