R:通过使用另一个数据帧中的值进行索引来从第二个数据帧中提取值
R: Pulling values from a second dataframe by indexing with values from another dataframe
对于数据帧 #1 的列中的每个条目,我想查看该值是否在数据帧 #2 中,然后从第二个数据帧的特定列中获取值,否则为 0 如果不能找到它。有没有办法为此使用 *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'))
下面的代码将在您的示例中给出结果,但如果 key
在 df2
中出现不止一次,它只会 return 第一个结果。如果这不是您想要的,请描述该场景所需的输出。
x <- as.integer(df2[["val2"]][match(df1[["key1"]], df2[["key2"]])])
x[is.na(x)] <- as.integer(0)
match
returns 第一个参数在第二个参数中匹配的位置。 match
将 return NA
用于非匹配项,这将在索引到 df2[["val2"]]
时创建一个 NA
值,因此必须将这些值更改为 0
得到最终结果。
对于数据帧 #1 的列中的每个条目,我想查看该值是否在数据帧 #2 中,然后从第二个数据帧的特定列中获取值,否则为 0 如果不能找到它。有没有办法为此使用 *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'))
下面的代码将在您的示例中给出结果,但如果 key
在 df2
中出现不止一次,它只会 return 第一个结果。如果这不是您想要的,请描述该场景所需的输出。
x <- as.integer(df2[["val2"]][match(df1[["key1"]], df2[["key2"]])])
x[is.na(x)] <- as.integer(0)
match
returns 第一个参数在第二个参数中匹配的位置。 match
将 return NA
用于非匹配项,这将在索引到 df2[["val2"]]
时创建一个 NA
值,因此必须将这些值更改为 0
得到最终结果。