多条件索引与 R 中的列名称匹配

问题描述 投票:0回答:1

我想要将一个数据框与另一个数据框匹配,以便第二列进入第三列中列出的列。第三列的值最多为 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 但使用列名没有成功。

r match lookup
1个回答
0
投票

您需要先将

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)
© www.soinside.com 2019 - 2024. All rights reserved.