首页 > 解决方案 > 如何在R中将一个小的df插入一个更大的df

问题描述

在 R 中:如何将小数据框插入更大的数据框并在必要时同时添加新行?数据框通常应按 ID1、ID2 和 ID3 合并。但是较大的数据框获得了较小数据框的所有行名。

要插入的主要数据框(NA 留空):

ID1  ID2  ID3  r1  r2  r3  r4  r5  r6
 A    1    a       d1
 A    1    b       d2
 A    2    a       d3

小数据框:

ID1  ID2  ID3  r5
 A    1    a   d4
 A    1    b   d5
 A    2    a   d6
 A    2    b   d7

期望的输出:

ID1  ID2  ID3  r1  r2  r3  r4  r5  r6
 A    1    a       d1          d4
 A    1    b       d2          d5
 A    2    a       d3          d6
 A    2    b                   d7

标签: r

解决方案


您可以使用 -

nr <- max(nrow(big_df), nrow(small_df))
big_df[1:nr, colnames(small_df)] <- small_df
big_df

#  ID1 ID2 ID3 r1   r2 r3 r4 r5 r6
#1   A   1   a NA   d1 NA NA d4 NA
#2   A   1   b NA   d2 NA NA d5 NA
#3   A   2   a NA   d3 NA NA d6 NA
#4   A   2   b NA <NA> NA NA d7 NA

数据

如果您以可重现的格式共享数据,则更容易提供帮助。

big_df <- structure(list(ID1 = c("A", "A", "A"), ID2 = c(1L, 1L, 2L),
 ID3 = c("a", "b", "a"), r1 = c(NA, NA, NA), r2 = c("d1", "d2", "d3"), r3 = c(NA,
NA, NA), r4 = c(NA, NA, NA), r5 = c(NA, NA, NA), r6 = c(NA, NA, 
NA)), class = "data.frame", row.names = c(NA, -3L))

small_df <- structure(list(ID1 = c("A", "A", "A", "A"), ID2 = c(1L, 1L, 2L, 
2L), ID3 = c("a", "b", "a", "b"), r5 = c("d4", "d5", "d6", "d7"
)), class = "data.frame", row.names = c(NA, -4L))

推荐阅读