2017-02-24 93 views
1

我正在做R兩個土地覆蓋時期的變化矩陣,我通常/很容易在Excel中使用數據透視表執行操作。相同的行和列的名稱R

我得到了如何在R中執行數據透視表的方式,但我在進一步操作數據框時遇到了一些麻煩。

我需要從具有不等行和列的數據幀中得到正確的行和列,並將0丟到缺少的行/列中。

樣品:

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

df1 

在 'DF1',行 'C' 和 'E' 缺失。我開始做一個for循環,進入行和查找缺少了什麼:

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

在此之後,我需要做的rbind以添加行中缺少的列。

我感謝您的幫助。

我可以發送原始和期望的表格供您參考。

謝謝!

南多

+0

謝謝!我查了一下。這很有幫助。 – nandoarz

回答

0

我們可以創建擁有完全名稱的matrix,然後使用match獲得基於原始和新基質匹配的行名和列名的行和列的索引,然後將其分配給新數據集

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

謝謝!有用!我只是把'as.matrix'放在我的數據框上的df1 [i1,j1]上。非常感謝你! – nandoarz

相關問題