根据其他数据框的行名在数据框中插入 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
我有 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