2013-12-17 2 views
1

다음 데이터 프레임이 있는데, "청크", "이름"및 "빈도"의 세 가지 벡터로 구성된 데이터 프레임 인 DF입니다. 이름이 같은 청크에있을 때 이름이 인접한 것으로 간주되는 NameXName 인접 행렬로 변환해야합니다. 예를 들어, 첫 번째 라인에서 Gretel과 Friedrich는 둘 다 Chunk2에 있기 때문에 인접 해 있습니다. 그리고 그 관계의 무게는 "빈도"에 기반해야합니다. 정확히 같은 청크 안에있는 횟수입니다. 그레텔/프리드리히 예제에서는 빈도 (그레텔) + 빈도 (프리드리히) -1 = 5입니다.데이터 프레임의 범주 데이터를 가중치가있는 인접 행렬로 변환

Chunk   Name Frequency 
1  2  Gretel   2 
2  2  Pollock   1 
3  2  Adorno   1 
4  2 Friedrich   4 
5  3   Max   1 
6  3 Horkheimer   1 
7  3  Adorno   1 
8  4 Friedrich   5 
9  4  Pollock   1 
10  4  March   1 
11  5  Comte   3 
12  7  Jaspers   1 
13  7  Huxley   2 
14  8 Nietzsche   1 
15  8   Sade   2 
16  8  Felix   1 
17  8   Weil   1 
18  8  Western   1 
19  8 Lowenthal   1 
20  8   Kant   1 
21  8  Hitler   1 

나는 DF $ 덩어리에 따라 데이터 프레임을 분할하여이에 균열, 내가 생각

> DF.split<-split(DF, DF$Chunk) 

$`2` 
    Chunk  Name Frequency 
1  2 Gretel   2 
2  2 Pollock   1 
3  2 Adorno   1 
4  2 Friedrich   4 

$`3` 
    Chunk  Name Frequency 
5  3  Max   1 
6  3 Horkheimer   1 
7  3  Adorno   1 

$`4` 
    Chunk  Name Frequency 
8  4 Friedrich   5 
9  4 Pollock   1 
10  4  March   1 

가까이 있어요,하지만 나는 문제로 다시 전환하는 데 문제 목록 항목을 반환하기 시작 실행할 수있는 데이터 프레임

나는 또한 ChunkXName의 인접 행렬이 점을 설정하여 시작하려고 한 다음 NAmeXName 행렬을 얻을 수는 전치에 의해 chunkbyname를 곱하여의 희망과

> chunkbyname<-tapply(DF$Frequency , list(DF$Name,DF$Chunk) , as.character) 

하지만,이 행렬이 너무 것 같다 스파 스 또는 복잡한 (% * % b 오류 : 숫자/복합 행렬/벡터 인수 필요).

이 데이터 프레임을 인접성 매트릭스로 가져 오는 데 도움을 주시면 크게 감사하겠습니다.

답변

3

이게 당신이 찾고 있는게 있니?

df3 <- by(df, df$Chunk, function(x){ 
    mm <- outer(x$Frequency, x$Frequency, "+") - 1 
    rownames(mm) <- x$Name 
    colnames(mm) <- x$Name 
    mm 
}) 

df3 

# $`2` 
#   Gretel Pollock Adorno Friedrich 
# Gretel   3  2  2   5 
# Pollock  2  1  1   4 
# Adorno   2  1  1   4 
# Friedrich  5  4  4   7 
# 
# $`3` 
#   Max Horkheimer Adorno 
# Max   1   1  1 
# Horkheimer 1   1  1 
# Adorno  1   1  1 
# 
# $`4` 
#   Friedrich Pollock March 
# Friedrich   9  5  5 
# Pollock   5  1  1 
# March    5  1  1 
+0

예. 정말 고맙습니다! – Mon

+0

당신이 원했던 방식으로 효과가 있었기 때문에 기쁩니다! – Henrik

관련 문제