如何从另一个不同长度的数据帧中对数据帧进行子集化?
例如:我有两个数据帧,df1
和df2
,如何使用df1
' s df2
对Year, Month, Day, Hour
进行分组,这样它就会变得像Expected Outcome
?
来自Year, Month, Day, Hour
中第4,6,7行的df1
与df2
的第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
答案 0 :(得分:2)
您可以使用semi_join
中的dplyr
功能:
library(dplyr)
semi_join(df1, df2, by = c("Year", "Month", "Day", "Hour"))
这将仅返回df1
中df2
按年,月,日和小时列匹配的行。与其他一些联接不同,它不会发生变异,这意味着它不会将df2
的列添加到结果中。