我在线搜索了一下,无法找到问题的解决方案。
我有两个数据帧(长度不同):
dataSC_SC_combos
SURVEY_DATE DATA_COLLECTION_SITE
2012-07-01 Site 1
2012-07-01 Site 2
2012-08-10 Site 2
2012-08-10 Site 3
2012-08-11 Site 2
2012-09-20 Site 1
和
dataSC_FSITE_combos
SURVEY_DATE FISHING_SITE
2012-07-01 Site 1
2012-07-01 Site 3
2012-08-10 Site 2
2012-08-11 Site 1
2012-08-11 Site 1
2012-09-20 Site 1
2012-09-26 Site 1
2012-09-27 Site 1
2012-10-14 Site 1
我想从这些中找到数据和网站的独特组合, 又名。
2012-07-01 Site 1
2012-08-10 Site 2
2012-09-20 Site 1
然后从更大的数据集中为这些独特的组合子集调查SURVEY_DATE& FISHING_SITE或SURVEY_DATE& DATA_COLLECTION_SITE。所以我得到这样的东西:
SURVEY_DATE FISHING_SITE DATA_COLLECTION_SITE
2012-07-01 Site 1
2012-07-01 Site 1
2012-08-10 Site 2
2012-09-20 Site 1
2012-09-20 Site 1
有没有人知道这样做的好方法? 提前谢谢。
答案 0 :(得分:1)
可能有更好的解决方案,但您可以这样做:
d1 <- do.call("paste", df1)
d2 <- do.call("paste", df2)
> df1[d1%in%d2, ]
SURVEY_DATE DATA_COLLECTION_SITE
1 2012-07-01 Site 1
3 2012-08-10 Site 2
6 2012-09-20 Site 1
最终结果:
> df3 <- df1[d1%in%d2, ]
> df4 <- df2[d2%in%d1, ]
>
> df3$FISHING_SITE <- NA
> df4$DATA_COLLECTION_SITE <- NA
>
> rbind(df3, df4)
SURVEY_DATE DATA_COLLECTION_SITE FISHING_SITE
1 2012-07-01 Site 1 <NA>
3 2012-08-10 Site 2 <NA>
6 2012-09-20 Site 1 <NA>
11 2012-07-01 <NA> Site 1
31 2012-08-10 <NA> Site 2
61 2012-09-20 <NA> Site 1
答案 1 :(得分:1)
使用dplyr
进行合并,plyr
用于排序和绑定行(它们是否相互协调?):
library(dplyr)
library(plyr)
names(dataSC_FSITE_combos) <- names(dataSC_SC_combos) <- c("SURVEY_DATE", "SITE")
ijoin <- inner_join(dataSC_SC_combos, dataSC_FSITE_combos)
# SURVEY_DATE SITE
# 1 2012-07-01 Site 1
# 2 2012-08-10 Site 2
# 3 2012-09-20 Site 1
arrange(rbind.fill(
setNames(
left_join(ijoin, dataSC_SC_combos), c("SURVEY_DATE","DATA_COLLECTION_SITE")),
setNames(
left_join(ijoin, dataSC_FSITE_combos), c("SURVEY_DATE", "FISHING_SITE"))), SURVEY_DATE)
# SURVEY_DATE DATA_COLLECTION_SITE FISHING_SITE
# 1 2012-07-01 Site 1 <NA>
# 2 2012-07-01 <NA> Site 1
# 3 2012-08-10 Site 2 <NA>
# 4 2012-08-10 <NA> Site 2
# 5 2012-09-20 Site 1 <NA>
# 6 2012-09-20 <NA> Site 1