是否有在数据中添加列的功能(rbind)

时间:2019-02-07 19:00:40

标签: r rbind

我想在存在的数据下添加3列。但是问题是我的第一个数据有10列(id,num,x,xx,xxx,xxx,xxx,.....) 第二个数据只有(id,num,x)3列

我想将第二个数据放在第一个数据中,为此,我想创建7个新列(仅NA)以使用rbind

例如,我有数据:

df1 <- data.frame(id = 1:5, num = 6:10, V1 = 11:15, V2 = 16:20)
df2 <- data.frame(id = 6:10, num = 11:15)

我想获得预期的输出:

   id num V1 V2
1   1   6 11 16
2   2   7 12 17
3   3   8 13 18
4   4   9 14 19
5   5  10 15 20
6   6  11 NA NA
7   7  12 NA NA
8   8  13 NA NA
9   9  14 NA NA
10 10  15 NA NA

我尝试创建仅包含NA的矩阵,并且我在网上进行了研究,但一无所获

2 个答案:

答案 0 :(得分:2)

基本的R函数rbind要求将所有绑定在一起的data.frames具有相同数量的列和名称。这将需要将多余的列添加到具有NA行的较小数据框中,或者需要另一个允许不匹配列的函数。幸运的是,bind_rows中有一个名为dplyr的函数可以准确地做到这一点:

dplyr::bind_rows(df1, df2)

输出:

> rbind(df1, df2)
Error in rbind(deparse.level, ...) : 
  numbers of columns of arguments do not match

> dplyr::bind_rows(df1, df2)
   id num V1 V2
1   1   6 11 16
2   2   7 12 17
3   3   8 13 18
4   4   9 14 19
5   5  10 15 20
6   6  11 NA NA
7   7  12 NA NA
8   8  13 NA NA
9   9  14 NA NA
10 10  15 NA NA

答案 1 :(得分:0)

这是一个外部连接 ---恰好是其中一个ID没有重叠的位置。

merge(df1, df2, all = TRUE)
   id num V1 V2
1   1   6 11 16
2   2   7 12 17
3   3   8 13 18
4   4   9 14 19
5   5  10 15 20
6   6  11 NA NA
7   7  12 NA NA
8   8  13 NA NA
9   9  14 NA NA
10 10  15 NA NA

有关上下文和更多选项,请参见how to merge (join) data in R?上的常见问题解答。