두 데이터 프레임 (foo
, bar
)에 저장된 변수 집합 (X
)을 비교하려고합니다. 각 X
은 최대 10 개의 값이 Y
과 연결된 고유 한 독립 변수입니다. 나는 모든 bar.X에 모든 foo.X를 비교하고 그들이 공통으로 가지고있는 Y
값의 수를 비교함으로써 - 출력은 foo.x 축이 bar.x 길이 인 행렬이 될 수있다.두 데이터 프레임에서 점수 매트릭스 만들기
foo는 바의 간단한 예는 2 × 2 행렬 C와 B, A 비교 반환 할 것, D :
가 편집
foo <- data.frame(x= c('a', 'a', 'a', 'b', 'b', 'b'), y=c('ab', 'ac', 'ad', 'ae', 'fx', 'fy'))
bar <- data.frame(x= c('c', 'c', 'c', 'd', 'd', 'd'), y=c('ab', 'xy', 'xz', 'xy', 'fx', 'xz'))
을 :
내가 떠 났어요 다른 초보자를위한 다음 코드는 배우기 쉽다 (for 루프는 효과적이지만 아마도 매우 차선책이다). 그러나 아래의 두 가지 해결책이 효과적이다. 특히 Ramnath의 data.table 사용은 매우 큰 데이터 프레임을 다룰 때 매우 효과적입니다.
저장소 (Y)의 값이 stack
함수
foo.list <- dlply(foo, .(x), function(x) stack(x, select = y))
bar.list <- dlply(bar, .(x),function(x) stack(x, select = y))
를 사용하여 저장된리스트와 dataframes는
comparelists <- function(list1, list2) {
for (i in list1){
for (j in list2){
count <- 0
if (i[[1]] %in% j[[1]]) count <- count + 1
}
}
return count
}
는 출력 매트릭스를 작성 개의 적층리스트에 멤버를 비교하는 기능을 작성
output.matrix <- matrix(1:length(foo.list), 1:length(bar.list))
for (i in foo.list){
for (j in bar.list){
output.matrix[i,j] <- comparelists(i,j)
}
@ ramnath에게 감사드립니다. 이것은 실제로 매우 우아하고 쉬운 해결책입니다. 불행히도이 사람은 전체 데이터 세트에 적용 할 때 내 컴퓨터를 손상시킵니다. 나는 내 데이터를 처리하기 위해 파이썬을 사용하는 나의 사전 R 전략으로 돌아갈 것이라고 생각한다. (나는 데이터를 반복하고 파일에 결과를 써서 컴퓨터가 뒤집히지 않도록한다.) 그리고 그래프를 위해 R을 사용한다. capabilites. – zach
'foo'와'bar'의 크기는 얼마나됩니까? – Ramnath
내 편집을 확인하십시오. 그것은'merge'를하기 위해'data.table'을 사용하므로 매우 효율적입니다. 이게 효과가 있는지 확인할 수 있습니까? 그 단계가 병목이면 데이터를 '캐스팅'하는 효율적인 방법을 찾으려고합니다. – Ramnath