2017-02-24 9 views
1

私は通常、ピボットテーブルを使用してExcelで行うことができるRの2つの土地被覆の変更マトリックスを作成しています。同じ行と列の名前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' が不足しています。私は、行になり、何が不足しているかを探してforループを作り始めた。この後

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

関連する問題