2017-11-07 2 views
0

나는 그래프 식 관계를 표 형식으로 나타 내기 위해 사용하는 데이터 프레임이 있습니다. 지금은 한 번에 3 개의 노드를 고려하고 있습니다. 나는 node1과 node2 사이의 관계, 그리고 node2와 node3 사이의 관계를 가지며, 각각의 노드는 대응하는 에지 가중치를 갖는다. 드물게 node1과 node3 사이에 관계가 있지만 분리하는 데 문제가 있습니다. 본질적으로, 나는 A -> B, B -> C를 가지고 있고 A -> C를 찾고 싶습니다. 다음은 데이터 프레임의 예입니다.R : 기존 열 관계를 기반으로 열 추가

df 
     node1 node2 weight1  node2_a  node3 weight2 
     5   2  .2   2   7  .3 
     10  20  .4   20   30  .6 
     10  30  .3   30   8  .3 

그래서, 기본적으로 내가이 작업을 수행하는 더 나은 방법이있을 수 있습니다 이해이

new_df 
     node1 node2 weight1  node2_a  node3 weight2 node1.a  node3.a  weight3 
     5   2  .2   2   7  .3   na   na   na 
     10  20  .4   20   30  .6   10   30   .3 
     10  30  .3   30   8  .3   na   na   na 

처럼 읽을 것 다른 세 개의 열을 가지고 싶다,하지만 난 궁금 내가 어떻게 할 수 이런 식으로 일하게하십시오. 고마워, 이것이 명확하지 않다면 나는 더 설명하게되어 기쁘다.

+0

나는 data.table이 아마도 왼쪽 조인과 함께 최선의 방법일지도 모른다고 생각하지만 제대로 이해하지 못한다. – Ryan

+0

1과 2, 2 및 3 사이의 관계는 무엇입니까? – Masoud

답변

0

이 더 많거나 적은 당신이 필요로하는 무엇을 제공합니다 ...

merge(df, df[1:3], 
     by.x=c("node1","node3"), by.y=c("node1","node2"), 
     all.x=TRUE) 

    node1 node3 node2 weight1.x node2_a weight2 weight1.y 
1  5  7  2  0.2  2  0.3  NA 
2 10  8 30  0.3  30  0.3  NA 
3 10 30 20  0.4  20  0.6  0.3 

이것은 dataframe를 재정렬,하지만 그건 중요하지 않을 수 있습니다. 당신은 (weight1.yweight3입니다) 순서 및 열 이름을 변경하는 것 같아서, 그리고 weight1.yNA이되지 않은 그 행을 node1node3에 동일로 node1.anode3.a 열을 추가 할 수 있습니다.

+1

이것은 훌륭하고 정확히 내가하려고 한 일입니다. 매우 감사합니다. – Ryan

관련 문제