我有一个名为df1的唯一键和值的数据框:
df1
Key Value
Art_1 1342
Art_2 432
Art_3 42342
Art_4 3244
Art_5 6757
Art_6 432
....
Art_7262 6757
我想使用该表为df2赋值。它有100万条目。
df2
Key Value
Art_1 1342
Art_1 NA
Art_1 NA
Art_2 NA
Art_2 6757
Art_2 NA
...
Art_600 NA
Art_600 NA
Art_600 6757
Art_600 6757
...
Art_7262 6757
Art_7262 NA
目前,我正在执行以下操作:
for (i in 1:nrow(df1)){
df2[(df2$key==df1$key[i]),]$value <- df1$value[i]
}
它非常慢。 最终输出应为:
df2
Key Value
Art_1 1342
Art_1 1342
Art_1 1342
Art_2 6757
Art_2 6757
Art_2 6757
...
Art_600 6757
Art_600 6757
Art_600 6757
Art_600 6757
...
Art_7262 6757
Art_7262 6757
答案 0 :(得分:1)
您可以将df1用作查找表
row.names(df1) = df1$Key
df2$Value = df1$Value[df2$Key]
答案 1 :(得分:1)
以正确的顺序使用match
功能会让事情变得美好而快捷:)
keymatches <- match(df2$Key, df1$Key)
df2$Value <- df1$Value[keyMatches]
match
只返回它找到匹配的向量中的位置。所以在这种情况下,它会返回c(1, 1, 1, 2, 2, 2)
等。然后我们将其用作我们想要在df1
中提取的索引。
答案 2 :(得分:1)
Wtih tidyverse
library(tidyverse)
df2 <- left_join(df2$key, df1, by = "Key")