如何按行索引加入数据集?

How to join a dataset by row index?

我有一个这样的数据集

Rownumber Name
5 John
7 Ken
9 Marvin

我还有一个看起来像这样的

LastName
Ming
Roe
Martin
Hugo
Sawyer
Wallace
Thomas
Wang
Abdul

请注意,我想将第二个数据集连接到第一个数据集。在第一个列中,我有一个名为行号的列,在第二个列中,我没有,但我有一个后端索引。

我希望我的数据集看起来像这样

Rownumber Name Last name
5 John Sawyer
7 Ken Thomas
9 Marvin Abdul

你看到在第二个数据集中,Sawyer 是第 5 行,Thomas 是第 7 行,而 Abdul 是第 9 行。

假设您的数据存储在名为 dfdf2 的两个 data.frames 中,您可以使用 dplyr join:

library(dplyr)
df2 %>% 
  mutate(Rownumber = row_number()) %>% 
  right_join(df, by = "Rownumber") %>% 
  select(Rownumber, Name, LastName)

这个returns

  Rownumber   Name LastName
1         5   John   Sawyer
2         7    Ken   Thomas
3         9 Marvin    Abdul
  • 首先为包含姓氏的 data.frame 创建行号。
  • 下一个 right_join 第一个 data.frame by Rownumber.

数据

df <- structure(list(Rownumber = c(5, 7, 9), Name = c("John", "Ken", 
"Marvin")), row.names = c(NA, -3L), class = "data.frame")

df2 <- structure(list(LastName = c("Ming", "Roe", "Martin", "Hugo", 
"Sawyer", "Wallace", "Thomas", "Wang", "Abdul")), row.names = c(NA, 
-9L), class = "data.frame")

我想你可以试试这个 left_join

> transform(df,LastName = df2$LastName[Rownumber])
  Rownumber   Name LastName
1         5   John   Sawyer
2         7    Ken   Thomas
3         9 Marvin    Abdul

另一种选择是使用 merge,其中我们使用 df1 中的 Rownumber 作为 by.x,然后使用 df2 中的 0对于 by.y,它指的是行名称。

merge(df1, df2, by.x = "Rownumber", by.y = 0, all.x = TRUE, all.y = FALSE)

输出

  Rownumber   Name LastName
1         5   John   Sawyer
2         7    Ken   Thomas
3         9 Marvin    Abdul

数据

df1 <- structure(list(Rownumber = c(5, 7, 9), Name = c("John", "Ken", 
"Marvin")), row.names = c(NA, -3L), class = "data.frame")

df2 <- structure(list(LastName = c("Ming", "Roe", "Martin", "Hugo", 
"Sawyer", "Wallace", "Thomas", "Wang", "Abdul")), row.names = c(NA, 
-9L), class = "data.frame")