通过调用行号合并 2 个数据集(不使用 merge() 或查找函数)

Merging 2 datasets by calling on the row numbers (without using merge() or lookup functions)

嗨,这是我 运行 在 R 编程中经常遇到的问题,我需要这个社区的简单解决方案。在排序中,问题需要将查找值返回到数据框。我想调用查找的行号 table

> x1 <- c(2, 3, 1, 5, 4) 
> x2 <- c("a", "b", "c", "d", "e")
> 
> set.seed(5) 
> x3 <- round(runif (10, 1, 5))
> 
> lookup.df <- data.frame(x1, x2)
> Data.df <- data.frame(x3)
> lookup.df
  x1 x2
1  2  a
2  3  b
3  1  c
4  5  d
5  4  e
> Data.df
   x3
1   2
2   4
3   5
4   2
5   1
6   4
7   3
8   4
9   5
10  1

Data.df$x2 <- df1 [ (matching row numbers from Data.df with lookup.df$x1) , 2 ]

理论上,代码应该能够生成如下所示的列表

rows <- c(1, 5, 4, 1, 3, 5, 2, 5, 4, 3)

这样会产生以下结果

> Data.df$x2 <- df1 [ rows , 2 ]
> Data.df
   x3 x2
1   2  a
2   4  e
3   5  d
4   2  a
5   1  c
6   4  e
7   3  b
8   4  e
9   5  d
10  1  c

我很欣赏一个想法。谢谢

我们可以使用命名向量来匹配

Data.df$x2 <- setNames(lookup.df$x2, lookup.df$x1)[as.character(Data.df$x3)]

-输出

> Data.df
   x3 x2
1   2  a
2   4  e
3   5  d
4   2  a
5   1  c
6   4  e
7   3  b
8   4  e
9   5  d
10  1  c

您可以使用match函数-

Data.df$x2 <- lookup.df$x2[match(Data.df$x3, lookup.df$x1)]

#   x3 x2
#1   2  a
#2   4  e
#3   5  d
#4   2  a
#5   1  c
#6   4  e
#7   3  b
#8   4  e
#9   5  d
#10  1  c

根据 post 的标题,我了解到您不想使用 merge 函数,但那将是最直接的解决方案。

merge(lookup.df, Data.df, by.x = 'x1', by.y = 'x3')