2017-06-06 39 views
1

如何从另一个长度不同的数据帧中对数据帧进行子集划分? 例如:我有两个数据帧,df1df2,我如何使用df2df1Year, Month, Day, Hour所以它会变成类似于Expected Outcome如何从另一个不同长度的数据框中对数据帧进行子集划分?

Year, Month, Day, Hour从第4行,6,7在df1比赛df2的行1,2,3,从而只有第4行,6,7在df1是在预期的结果。

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

你可以用'merge'做到这一点,但你需要从'df2','合并(DF1,DF2筛选列,通过= C( “年”, “月”, “日”,“小时“))'。 –

回答

2

可以使用从功能:

library(dplyr) 

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

这将df1了在df2的年,月,日和时列匹配只返回行。与其他一些连接不同,它不是变异的,这意味着它不会将df2的列添加到结果中。

+1

绝对比使用'inner_join'更优雅。 :) –

+0

太棒了!谢谢。 – Jimmy

相关问题