我想要将一个数据框与另一个数据框匹配,以便第二列进入第三列中列出的列。第三列的值最多为 20。 谢谢!
示例 df1 |。 |。 |。 | |--------|---|--| |365 |58 |1 | |12 |32 |1 | |693 |79 |1 | |365 |25 |2 | |1 |37 |1 | |693 |18 |2 |
示例 df2
1 12 365 693
期望的输出: | |1 |2。 | |----|---|---| |1 |37 | | |12 |32 | | |365 |58 |25 | |693 |18 |18 |
我尝试过使用 case when 但使用列名没有成功。
您需要先将
df1
重塑/转换/旋转为宽格式,然后才是正常的合并/连接操作。例如,以 R 为基数:
merge(df2, reshape(df1, idvar="V1", timevar="V3", direction="wide"), by="V1")
# V1 V2.1 V2.2
#1 1 37 NA
#2 12 32 NA
#3 365 58 25
#4 693 79 18
或者整洁的诗句:
library(dplyr)
library(tidyr)
df1 %>%
pivot_wider(names_from=V3, values_from=V2) %>%
right_join(df2, by="V1")
## A tibble: 4 × 3
# V1 `1` `2`
# <int> <int> <int>
#1 365 58 25
#2 12 32 NA
#3 693 79 18
#4 1 37 NA
使用您读入的帖子中的示例数据和名称:
df1 <- read.table(text="365 58 1
12 32 1
693 79 1
365 25 2
1 37 1
693 18 2", header=FALSE)
df2 <- read.table(text="1
12
365
693", header=FALSE)