r - Can't match data.frames correctly -
what doing wrong here? date "5" not in final data.frame.. why that?
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
for example above think want ev[ev$date2 %in% df$date1 , ]
.
have created example new data dates quite different row numbers.
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)
@ vectors want match
df$date1 #[1] 10 11 12 13 14 15 16 17 18 ev$date2 # [1] 10 11 12 13 20 17 # 1 of ev$date2 in df$date1 (ie. ev$date2 = 20)
match date values
first @ %in%
operand.
this produces " logical vector indicating if there match or not left operand" (from ?match). ie example below - ev$date2 appear in df$date1: true or false
ev$date2 %in% df$date1 # [1] true true true true false true
i use method subset data: if want keep rows of ev ev$date2 appear in df$date1 use
ev[ev$date2 %in% df$date1 , ] # date2 q # 1 10 3 # 2 11 2 # 3 12 1 # 4 13 4 # 6 17 7
match
"returns vector of positions of (first) matches of first argument in second" (again help). ie example - (as in @ positional index) values of ev$date2 appear in df$date1, if @ all
match(ev$date2 , df$date1) # [1] 1 2 3 4 na 8 # sp makes sense: values of ev$date2 found in df$date1 # (with position in df$date1 returned) except ev$date2 = 20 - # returns na not found in df$date1
i use method pull out values df, matching on date. ie
(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
Comments
Post a Comment