2017-02-24 6 views
1

나는 피벗 테이블을 사용하여 Excel에서 대개/쉽게 할 수있는 R의 두 가지 기간의 토지 변화 매트릭스를 만들고 있습니다.같은 행과 열 이름 R

R에서 피벗 테이블 방식을 수행하는 방법이 있지만 데이터 프레임을 조작하는 데 약간 문제가 있습니다.

불균등 한 행과 열이있는 데이터 프레임에서 정확한 행과 열을 가져야하며 누락 된 행/열에 0을 넣어야합니다.

샘플 :

'DF1'에서
df <- matrix(1:20, 4) 
colnames(df) <- c('a', 'b', 'c', 'd', 'e') 
rownames(df) <- c('a', 'b', 'c', 'd') 
df1 <- df[-3,] 

df1 

행 'C'및 'E'가 없습니다. 내가 행으로가는 루프를 만들기 시작하고 실종 무엇을 찾아이 후

FinalTable <- function (df){ 
    for (i in rownames(df)){ 
    if (i != colnames(df)){ 
     print ('not equal') 
    } 
    } 
} 

을, 나는 행에 누락 된 열을 추가 rbind 할 필요가있다.

감사합니다.

참조 용 원시 테이블과 원하는 테이블을 보낼 수 있습니다.

감사합니다.

난도

+0

고마워요! 나는 그것을 점검했다. 도움이됩니다. – nandoarz

답변

0

우리는 원본과 새로운 매트릭스에서 일치하는 행 이름과 열 이름에 따라 행과 열 인덱스를 얻을 수 match를 사용하여 다음 전체 이름을 가진 matrix를 만든 다음에 할당 할 수 있습니다 새 데이터 집합

un1 <- sort(union(rownames(df1), colnames(df1))) 
m1 <- matrix(0, dimnames = list(un1, un1), ncol=length(un1), nrow=length(un1)) 
i1 <- match(rownames(m1), rownames(df1), nomatch = 0) 
j1 <- match(colnames(m1), colnames(df1), nomatch = 0) 
i2 <- match(rownames(df1), rownames(m1)) 
j2 <- match(colnames(df1), colnames(m1)) 
m1[i2,j2] <- df1[i1,j1] 
m1 
# a b c d e 
#a 1 5 9 13 17 
#b 2 6 10 14 18 
#c 0 0 0 0 0 
#d 4 8 12 16 20 
#e 0 0 0 0 0 
+0

고마워요! 그것은 작동합니다! df1 [i1, j1]에 'as.matrix'를 데이터 프레임에 넣었습니다. 고마워요! – nandoarz