For every entry in a column of dataframe #1, I want to see if that value is in a dataframe #2 and then grab a value from a particular column from the second dataframe, else 0 if it can't find it. Is there a way to use one of the *apply functions for this?
df1 <- data.frame(
key1 = c("A","B","C","E")
df2 <- data.frame(
key2 = c("X", "A", "C", "D", "E"),
val2 = as.integer(c('1','2','23','41','99'))
#Answer should be a vector like this:
x <- as.integer(c('2','0','23','99'))
The code below will give your the results in your example, but if the
key appears more than once in
df2 it will return only the first result. If that is not what you want, please describe the desired output for that scenario.
x <- as.integer(df2[["val2"]][match(df1[["key1"]], df2[["key2"]])]) x[is.na(x)] <- as.integer(0)
match returns the locations of the positions of matches of its first argument in its second.
match will return
NA for non matches, which will create a
NA value when it indexes into
df2[["val2"]], so those values have to be changed to
0 to get the final result.