根据R中两个数据帧上共同的参考列匹配两个数据帧的列

时间:2013-08-29 09:17:28

标签: r

我正在尝试使用来自其他两个数据帧的数据创建数据帧。基本上我有这个:

structure(list(V1 = c(1L, 2L, 3L, 5L, 6L, 7L, 8L, 10L, 11L, 12L
), V2 = c(0.916983532, 1.032711089, 0.836822161, 1.006113655, 
1.008669791, 1.036207351, 1.097991705, 1.002907627, 1.108148337, 
1.092072261)), .Names = c("V1", "V2"), class = "data.frame", row.names = c(NA, 
-10L))

而且:

structure(list(V1 = c(1L, 2L, 4L, 5L, 6L, 8L, 9L, 10L, 11L, 12L
), V2 = c(0.965881642, 1.061808325, 1.270001821, 1.018682611, 
1.18481589, 1.073037748, 1.039466199, 0.848856926, 0.839672387, 
0.802535575)), .Names = c("V1", "V2"), class = "data.frame", row.names = c(NA, 
-10L))

想获得以下输出:

structure(list(V1 = 1:12, V2 = c(0.9169835, 1.0327111, 0.8368222, 
0, 1.0061137, 1.0086698, 1.0362074, 1.0979917, 0, 1.0029076, 
1.1081483, 1.0920723), V3 = c(0.965881642, 1.061808325, 0, 1.270001821, 
1.018682611, 1.18481589, 0, 1.073037748, 1.039466199, 0.848856926, 
0.839672387, 0.802535575)), .Names = c("V1", "V2", "V3"), class = "data.frame", row.names = c(NA, 
-12L))

所以,我想要R做的是在两个数据帧中输入V2的值,如果V1上的值匹配,那么它们在同一行中进行进一步分析。问题是V1不会在每个数据帧上遵循相同的顺序,有时在第一个数据帧上会有一个值,但在第二个数据帧中不存在,或者值可能是不同的顺序,所以我想要R在两个数据帧的V1列,并根据V1对V2的值进行分组,如果V1值不在其中一个数据帧中,则在输出数据帧中放置零或NA。

我已尝试过匹配和合并功能,但到目前为止没有运气。

提前感谢您提供任何帮助

1 个答案:

答案 0 :(得分:0)

这个怎么样?

merge(df.1,df.2,by="V1",all=TRUE)

   V1      V2.x      V2.y
1   1 0.9169835 0.9658816
2   2 1.0327111 1.0618083
3   3 0.8368222        NA
4   4        NA 1.2700018
5   5 1.0061137 1.0186826
6   6 1.0086698 1.1848159
7   7 1.0362074        NA
8   8 1.0979917 1.0730377
9   9        NA 1.0394662
10 10 1.0029076 0.8488569
11 11 1.1081483 0.8396724
12 12 1.0920723 0.8025356

all参数设置为TRUE时,即使其中一个data.frames不包含匹配的行,它也会保留所有行。如果data.frame不包含匹配的行,则会填写NA

要获取变量名称V2和V3,您可以预先在第二个data.frame(此处定义为df.2)中将V2重命名为V3,或者在合并后重命名V2.x和V2.y。