我正在尝试使用来自其他两个数据帧的数据创建数据帧。基本上我有这个:
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。
我已尝试过匹配和合并功能,但到目前为止没有运气。
提前感谢您提供任何帮助
答案 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。