我有两个数据集,看起来像这样:第一个是:
<表类>
id
齿轮
tbody><<tr>A1 A2 td> A3 C A4 D A5 E A6 F A7 G td A8 H A9 我 A10 G 表类>
您可以使用left_join
,然后比较两列:
library(dplyr)
dat1 %>%
left_join(dat2, by = c("id1" = "id2")) %>%
mutate(CHECK = Gear1 == Gear2) %>%
select(id = id1, gear = Gear1, CHECK)
# A tibble: 10 × 3
id gear CHECK
<chr> <chr> <lgl>
1 A1 A TRUE
2 A2 B FALSE
3 A3 C TRUE
4 A4 D FALSE
5 A5 E TRUE
6 A6 F NA
7 A7 G TRUE
8 A8 H FALSE
9 A9 I TRUE
10 A10 G NA
查看dplyr
文档如何使用连接。
编辑
感谢Ritchie Sacramento在select
函数中直接重命名的技巧。
试试这个:
dat1 |>
mutate(check = ifelse(!id1 %in% dat2$id2,
NA,
ifelse(paste(id1, Gear1) %in% paste(dat2$id2, dat2$Gear2),
TRUE,
FALSE)))
library(tidyverse)
dat1 = rename(dat1, id = 'id1')
dat2 = rename(dat2, id = 'id2')
check_data = dat1 %>%
full_join(dat2, by='id') %>%
mutate(check = ifelse(Gear1==Gear2, TRUE, FALSE)) %>%
filter(! is.na(Gear1))
输出:
check_data
# A tibble: 10 x 4
id Gear1 Gear2 check
<chr> <chr> <chr> <lgl>
1 A1 A A TRUE
2 A2 B A FALSE
3 A3 C C TRUE
4 A4 D E FALSE
5 A5 E E TRUE
6 A6 F NA NA
7 A7 G G TRUE
8 A8 H B FALSE
9 A9 I I TRUE
10 A10 G NA NA