각 팀마다 8 명 또는 9 명의 플레이어가 있습니다 (실제 데이터에는 8 명에서 16 명까지의 팀이 수천 명이 있습니다). 두 팀 간의 연결 유형을 확인하고 싶습니다. 첫 번째 주문 연결은 두 팀 간의이며 두 팀 모두 동일한 플레이어가 사용됩니다. 이 연결을 올바르게 생성 할 수 있습니다 (아래 참조). 의 경우 두 번째 순서 연결 각 팀의 최소 한 명 이상의 선수가 세 번째 팀에서 함께 경기를합니다. 아래 예에서 팀 a의 경우 플레이어 a가 재생되고 팀 b의 경우 플레이어 b가 재생되고 팀 c의 경우 플레이어 a와 b가 모두 재생되므로 팀 a와 "b"는 이차 순서 연결입니다.관찰 쌍 사이의 1 차 및 2 차 연결을 생성하는 논리
아래 코드는 1 차 연결을 올바르게 처리합니다. 또한 2 차 연결 (팀 "c"를 통해 팀 "a"와 "b"사이)을 올바르게 처리하지만 동일한 팀을 통해 연결을 계산하여 잘못된 2 차 연결을 플래그합니다. 나는이 경우를 무시하는 논리를 이해할 수 없다. 수천 팀의 실제 데이터에서 이러한 사례를 수동으로 무시할 수는 없습니다.
아이디어가 있으십니까? 감사!
# generic data
dat <- data.frame(team=rep(letters[1:3],
length.out=26),
man=letters)
# dat$man[2] <- "a" # one first-order connection
dat$man[3] <- "a" # one second-order connection
dat$man[6] <- "b" # one second-order connection
# first order
temp1 <- merge(x=dat, y=dat, by=NULL)
temp2 <- temp1
temp1$sameMan <- 1*with(temp1, man.x == man.y)
order1 <- aggregate(sameMan ~ team.x + team.y,
data=temp1,
FUN=sum)
subset(order1, team.x != team.y)
# second order
temp2$sameTeam <- 1*with(temp2, (team.x == team.y))
temp2 <- aggregate(sameTeam ~ man.x + man.y,
data=temp2,
FUN=sum)
temp2 <- merge(x=temp1, y=temp2)
order2 <- aggregate(sameTeam ~ team.x + team.y,
data=temp2,
FUN=sum)
subset(order2, team.x != team.y)
# here the correct output is:
order2$sameTeamCorrect <- 0
order2$sameTeamCorrect[c(2, 4)] <- 1
subset(order2, team.x != team.y)
이 수율 :
> subset(order2, team.x != team.y)
team.x team.y sameTeam sameTeamCorrect
2 b a 1 1
3 c a 17 0
4 a b 1 1
6 c b 17 0
7 a c 17 0
8 b c 17 0
감사합니다.'aggregate'가'subset' 인수를 받아 들일지 몰랐습니다. 그러나 올바른 출력은 a-b 쌍이 하나의 2 차 연결을 갖는 것으로 표시합니다. 나는 그것이 현재 팀에있을 때 관계를 할인해야하지만, 나는 그 사건을 다루는 방법을 알아낼 수 없다. 감사! –