如何按行索引加入数据集?
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 行。
假设您的数据存储在名为 df
和 df2
的两个 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")
我有一个这样的数据集
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 行。
假设您的数据存储在名为 df
和 df2
的两个 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 byRownumber
.
数据
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")