2016-11-16 109 views
0

对于数据帧#1列中的每个条目,我想查看该值是否在数据帧#2中,然后从特定数据帧中获取一个值第二个数据帧的列,否则为0,如果无法找到它。有没有办法使用其中的一个* apply函数呢?下面R:通过索引来自另一个数据帧的值索引第二个数据帧的值

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

回答

2

的代码将让你的结果你的榜样,但如果keydf2出现一次超过它会只返回的第一个结果。如果这不是您想要的,请描述该场景所需的输出。

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

match返回其第一个参数的匹配位置的第二个位置的位置。 match将返回NA表示不匹配,当它索引到df2[["val2"]]时将创建一个NA值,因此必须将这些值更改为0才能获得最终结果。

+0

谢谢!这将做我所需要的。 – Boost

+0

很高兴为您提供帮助。如果解决了问题,接受答案可以让人们知道找到了解决方案。 – Barker

相关问题