对于数据帧#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'))
答案 0 :(得分:3)
以下代码会在您的示例中显示结果,但如果key
在df2
中出现多次,则只会返回第一个结果。如果这不是您想要的,请描述该场景的所需输出。
x <- as.integer(df2[["val2"]][match(df1[["key1"]], df2[["key2"]])])
x[is.na(x)] <- as.integer(0)
match
返回其第二个参数的匹配位置的位置。对于非匹配,match
会返回NA
,这会在索引到NA
时创建df2[["val2"]]
值,因此这些值必须更改为0
得到最终结果。