相同的行和列名 R

same row and column names R

我正在 usually/easily 使用枢轴 table 在 Excel 中做 R 中两个土地覆盖时期的变化矩阵。

我了解了如何在 R 中执行枢轴 table 方式,但我在进一步操作数据框时遇到了一些麻烦。

我需要从具有不相等行和列的数据框中获取精确的行和列,并将 0 填入缺失的 rows/columns。

样本:

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 以添加行中缺少的列。

感谢您的帮助。

我可以发送原始的和想要的 table 供您参考。

谢谢!

南多

我们可以创建一个全名的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