2015-11-10 2 views
-1

У меня есть данные, которые выглядят, как это в первенствует:Как включить только подходящие дни?

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 

И я хочу, чтобы исключить какие-либо ценности, которые его associted дата не существует в обеих сериях.

для данных образцов я отправил результат должен выглядеть следующим образом:

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

будут ли дублироваться даты либо в столбцах dATE1 или date2? – A5C1D2H2I1M1N2O1R2T1

+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))) 
+0

Спасибо Ананде, это работает. –

+0

Привет, Ананда, Мне было интересно, могу ли я применить первый код более чем к двум сериям, поэтому у меня есть один и тот же образец, но с более чем 100 различными датами и значениями. Еще раз спасибо. –

Смежные вопросы