如何从另一个具有不同长度的数据帧中对数据帧进行子集化?

时间:2017-06-06 04:45:14

标签: r vectorization

如何从另一个不同长度的数据帧中对数据帧进行子集化? 例如:我有两个数据帧,df1df2,如何使用df1' s df2Year, Month, Day, Hour进行分组,这样它就会变得像Expected Outcome

来自Year, Month, Day, Hour中第4,6,7行的df1df2的第1,2,3行匹配,df1只有{4}中的第4,6,7行1}}符合预期的结果。

DF1

    V1  Year Month Day Hour Min Sec   Weight
1  1640 1999    02  05   04  00  00 1.936074
2  1519 1999    02  10   12  00  00 1.944277
3  1219 1999    02  25   16  00  00 1.947789
4  1720 1999    03  11   16  00  00 1.946841
5  1782 1999    03  18   08  00  00 1.956711
6  1523 1999    03  24   12  00  00 1.965768
7  1153 1999    04  01   16  00  00 1.981121
8  1262 1999    04  08   16  00  00 1.987066
9  1860 1999    04  15   00  00  00 1.982274
10 1624 1999    04  28   08  00  00 1.999045

DF2

    V1  Year Month Day Hour Min Sec   Weight
1  3587 1999    03  11   16  00  00 2.836074
2  4675 1999    03  24   12  00  00 2.854277
3  3592 1999    04  01   16  00  00 2.917789
4  2980 1999    04  12   16  00  00 2.926841
5  2857 1999    04  18   16  00  00 2.986711

预期结果

    V1  Year Month Day Hour Min Sec   Weight
4  1720 1999    03  11   16  00  00 1.946841
6  1523 1999    03  24   12  00  00 1.965768
7  1153 1999    04  01   16  00  00 1.981121

1 个答案:

答案 0 :(得分:2)

您可以使用semi_join中的dplyr功能:

library(dplyr)

semi_join(df1, df2, by = c("Year", "Month", "Day", "Hour"))

这将仅返回df1df2按年,月,日和小时列匹配的行。与其他一些联接不同,它不会发生变异,这意味着它不会将df2的列添加到结果中。