根据其他数据框的行名在数据框中插入 NA 行

Insert NA-rows in data frame according to rownames of other data frame

我有 2 个具有不同行名的数据框,例如:

df1 <- data.frame(A = c(1,3,7,1,5), B = c(5,2,9,5,5), C = c(1,1,3,4,5))
df2 <- data.frame(A = c(4,3,2), B = c(4,4,9), C = c(3,9,3))
rownames(df2) <- c(1, 3, 6)

> df1
  A B C
1 1 5 1
2 3 2 1
3 7 9 3
4 1 5 4
5 5 5 5

> df2
  A B C
1 4 4 3
3 3 4 9
6 2 9 3

我需要在两个数据框中为仅存在于一个数据框中的每一行插入 NA 行。在给定的示例中:

> df1
  A  B  C
1 1  5  1
2 3  2  1
3 7  9  3
4 1  5  4
5 5  5  5
6 NA NA NA

> df2
  A  B  C
1 4  4  3
2 NA NA NA
3 3  4  9
4 NA NA NA
5 NA NA NA
6 2  9  3

我将不得不对不同的数据帧多次执行此操作,因此我需要一种自动化的方法来执行此操作。我试图用不同的 if/else 循环来解决这个问题,但我确信必须有一种更加自动化的方法。

我们可以使用函数 union%in%intersect 来查找常见的行名,并在 NA 数据帧的行中分配数据集的值(如果它与行名匹配)

un1 <- union(rownames(df1), rownames(df2))
d1  <- as.data.frame(matrix(NA, ncol = ncol(df1), 
        nrow = length(un1), dimnames = list(un1, names(df1))))
d2 <- d1
d1[rownames(d1) %in% rownames(df1),]  <- df1
d2[rownames(d2) %in% rownames(df2),] <- df2
d2
#   A  B  C
#1  4  4  3
#2 NA NA NA
#3  3  4  9
#4 NA NA NA
#5 NA NA NA
#6  2  9  3