如何只包括匹配日?

时间:2015-11-10 11:59:54

标签: r excel

我的数据在excel中看起来像这样:

Date1       Value1  Date2       Value2
1/2/2004    17      1/3/2004    27
1/3/2004    26      1/4/2004    30
1/4/2004    22      1/5/2004    22
1/5/2004    17      1/6/2004    28
1/13/2004   15      1/7/2004    17
1/14/2004   10      1/14/2004   21

我想排除在两个系列中都不存在其关联日期的任何值。

我发布的样本数据结果如下:

Date1       Value1  Date2       Value2
1/3/2004    26      1/3/2004    27
1/4/2004    22      1/4/2004    30
1/5/2004    17      1/5/2004    22
1/14/2004   10      1/14/2004   21

1 个答案:

答案 0 :(得分:0)

一个选项是merge数据。我们可以先创建一个列表,其中前两列作为第一个列表项,后两列作为第二个列表项,然后使用Reduce合并“Date1”和“Date2”,如下所示:

Reduce(function(x, y) merge(x, y, by.x = "Date1", by.y = "Date2"),
       list(mydf[1:2], mydf[3:4]))
#       Date1 Value1 Value2
# 1 1/14/2004     10     21
# 2  1/3/2004     26     27
# 3  1/4/2004     22     30
# 4  1/5/2004     17     22

另外,不确定这是多么万无一失,但你可以试试:

A <- mydf[match(mydf$Date2, mydf$Date1, nomatch = FALSE), 1:2]
B <- mydf[match(mydf$Date1, mydf$Date2, nomatch = FALSE), 3:4]

cbind(A, B)

甚至:

temp <- rbind(mydf[1:2], setNames(mydf[3:4], names(mydf)[1:2]))
temp <- temp[duplicated(temp$Date1) | duplicated(temp$Date1, fromLast = TRUE), ]
do.call(cbind, split(temp, ave(temp$Date1, temp$Date1, FUN = seq_along)))