我的数据在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
答案 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)))