R Can';无法正确匹配数据帧
我做错了什么?日期“5”不在最终数据框中。。为什么呢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(
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