0

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

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))

因此,如果 V1 上的值匹配,我希望 R 将两个数据帧中的 V2 值放入一个新的数据帧中,以便它们位于同一行以供进一步分析。问题是 V1 不会在每个数据帧上遵循相同的顺序,有时在第一个数据帧的 V1 中会有一个值,但在第二个数据帧中没有,或者这些值的顺序可能不同,所以我希望 R 在两个数据帧的 V1 列,并根据 V1 对 V2 的值进行分组,如果 V1 值不在其中一个数据帧中,则在输出数据帧中放置零或 NA。

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

提前感谢您的帮助

4

1 回答 1

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 不包含匹配行,它也会保留所有行。当 adata.frame不包含匹配行时,NA填写。

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

于 2013-08-29T09:32:39.837 回答