R Can';无法正确匹配数据帧

R Can';无法正确匹配数据帧,r,dataframe,match,R,Dataframe,Match,我做错了什么?日期“5”不在最终数据框中。。为什么呢 date1 <- c(1,2,3,4,5,6,7,8,9) ret <- c(1.2,2.2,-0.5,0.98,0.73,-1.3,-0.02,0.3,1.1) df <- data.frame(date1,ret) date2 <- c(1,2,3,5,6,8) q <- c(3,2,1,4,5,7) ev <- data.frame(date2,q) matched <- ev[which(

我做错了什么?日期“5”不在最终数据框中。。为什么呢

date1 <- c(1,2,3,4,5,6,7,8,9)
ret <- c(1.2,2.2,-0.5,0.98,0.73,-1.3,-0.02,0.3,1.1)
df <- data.frame(date1,ret)

date2 <- c(1,2,3,5,6,8)
q <- c(3,2,1,4,5,7)
ev <- data.frame(date2,q)

matched <- ev[which(is.na(match(df[["date1"]], ev[["date2"]])) == F),]
matched

#    date2  q
# 1      1  3
# 2      2  2
# 3      3  1
# 5      6  5
# 6      8  7
# NA    NA NA

date1对于上面的示例,我认为您需要
ev[ev$date2%在%df$date1,]


我用新数据创建了另一个示例,这样日期与行号就大不相同了

date1 <- 10:18
ret <- c(1.2,2.2,-0.5,0.98,0.73,-1.3,-0.02,0.3,1.1)
df <- data.frame(date1,ret)

date2 <- c(10:13,20,17)
q <- c(3,2,1,4,5,7)
ev <- data.frame(date2,q)

匹配日期值

首先查看%
操作数中的
%

这将生成一个“逻辑向量”,指示是否存在匹配 或不用于其左操作数“(从?匹配)。例如,下面的例子- ev$date2是否出现在df$date1中:TRUE还是FALSE

ev$date2 %in% df$date1
# [1]  TRUE  TRUE  TRUE  TRUE FALSE  TRUE
我会使用这种方法来子集数据:如果我们只想保持 ev$date2出现在df$date1 use中的ev行

ev[ev$date2 %in% df$date1 , ]
#   date2 q
# 1    10 3
# 2    11 2
# 3    12 1
# 4    13 4
# 6    17 7

match
“返回(第一个)匹配位置的向量 它的第一个参数在它的第二个“(再次从帮助)。比如说,- ev$date2的值在df$date1中出现在哪里(如在什么位置索引中), 如果有的话

match(ev$date2 , df$date1)
# [1]  1  2  3  4 NA  8

# Sp that makes sense: all values of ev$date2 are found in df$date1
# (with their position in df$date1 returned) except where ev$date2 = 20 - this 
# returns NA as it is not found in df$date1
我将使用此方法从df中提取值,在日期上匹配。即

(ev$ret <- df$ret[match(ev$date2 , df$date1) ])
  #date2 q   ret
#1    10 3  1.20
#2    11 2  2.20
#3    12 1 -0.50
#4    13 4  0.98
#5    20 5    NA
#6    17 7  0.30
(ev$ret)
(ev$ret <- df$ret[match(ev$date2 , df$date1) ])
  #date2 q   ret
#1    10 3  1.20
#2    11 2  2.20
#3    12 1 -0.50
#4    13 4  0.98
#5    20 5    NA
#6    17 7  0.30