R:通过索引来自另一个数据帧的值从第二个数据帧中提取值

时间:2016-11-16 18:09:20

标签: r apply

对于数据帧#1列中的每个条目,我想查看该值是否在数据帧#2中,然后从第二个数据帧中的特定列中获取值,否则为0,如果它不能#t; t找到它。有没有办法使用其中一个* apply函数?

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'))

1 个答案:

答案 0 :(得分:3)

以下代码会在您的示例中显示结果,但如果keydf2中出现多次,则只会返回第一个结果。如果这不是您想要的,请描述该场景的所需输出。

x <- as.integer(df2[["val2"]][match(df1[["key1"]], df2[["key2"]])])
x[is.na(x)] <- as.integer(0)

match返回其第二个参数的匹配位置的位置。对于非匹配,match会返回NA,这会在索引到NA时创建df2[["val2"]]值,因此这些值必须更改为0得到最终结果。