在r中给出表中的值

时间:2018-01-30 22:20:23

标签: r data-manipulation

我有一个名为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

3 个答案:

答案 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")