通过调用行号合并 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')
嗨,这是我 运行 在 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')