在 R 中按行和按列合并数据帧

Merging data frames row-wise and column-wise in R

如何合并两个数据框,一个按列,另一个按行?例如,我有两个这样的数据框:

A:    add1 add2 add3 add4  
  1   k    NA   NA   NA 
  2   l    k    NA   NA 
  3   j    NA   NA   NA 
  4   j    l    NA   NA

B:    age  size name  
  1   5    6    x   
  2   8    2    y  
  3   1    3    x
  4   5    4    z 

我想通过 row.name 合并两个 data.frames。但是,我想按列而不是按行合并 data.frame A。所以,我正在寻找这样的 data.frame 结果:

C:id  age  size name add  
  1   5    6    x   k
  2   8    2    y   l
  2   8    2    y   k
  3   1    3    x   j
  4   5    4    z   j
  4   5    4    z   l

例如,假设你有 table B 中的人的信息,包括姓名、大小等。这些信息是唯一值,因此你在 B 中每个人一行。然后,假设在 table A,你最多有5个过去的地址。第一列是最近的地址;第二,是第二个最近的地址;等等。现在,如果某人的地址少于 5 个(例如 3 个),则该人的第 4 列和第 5 列中有 NA。

我想要实现的是一个包含所有这些信息的数据框 (C)。因此,对于有两个地址的人,我需要 table C 中的两行,重复唯一值并且仅在列地址中有所不同。

我正在考虑按非 NA 值的数量重复 A 数据框的行,同时保持 row.name 与它们相同(如数据框 D),然后合并新的与 B 的数据框。但我不确定如何执行此操作。

D:    address   
  1   k    
  2   l    
  2   k
  3   j
  4   j
  4   l

谢谢!

把第一个data.frame改成长格式,就简单了。 df1是A,df2是B。我也把数字命名为id。

require(tidyr)

# wide to long (your example D)
df1tidy <- gather(df1,addname,addval,-id)

# don't need the original add* vars or NA's
df1tidy$addname <- NULL
df1tidy <- df1tidy[!is.na(df1tidy$addval), ]

# merge them into the second data.frame
merge(df2,df1tidy,by = 'id',all.x = T)