如何合并两个数据框,一个是列,另一个是行?例如,我有两个这样的数据框:
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
例如,假设您有表B中人员的信息,包括姓名,大小等。这些信息是唯一值,因此您在B中每人有一行。然后,假设在表A中,您必须达到5个过去的地址。第一列是最新的地址;第二,是第二个最近的地址;现在,如果某人的地址少于5个(例如3个),则该人的4和5列中有NA。
我想要实现的是一个数据框(C),它包含所有这些信息。因此,对于具有两个地址的人,我在表C中需要两行,重复唯一值并且仅在列地址中不同。
我正在考虑通过非NA值的数量重复A数据帧的行,同时保持row.names与它们相同(如数据帧D),然后将新数据帧与B合并。但我不知道该怎么做。
D: address
1 k
2 l
2 k
3 j
4 j
4 l
谢谢!
答案 0 :(得分:2)
将第一个data.frame更改为long格式,然后很容易。 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)