我有兩個資料框。第一個是參考 df ,如下所示:
| 變數1 | 變數2 |
|---|---|
| 一個 | e |
| b | z |
| C | F |
| d | H |
第二個是我的宇宙:
| 符號1 | 符號2 |
|---|---|
| e | 一個 |
| b | F |
| b | z |
| F | C |
| n | s |
| n | ? |
| ? | l |
我想合并它們,并僅從宇宙中所有可能的對中獲取參考資料框中存在的唯一組合。
理想情況下,我希望報告的資料框如下所示:
| 變數1 | 變數2 |
|---|---|
| 一個 | e |
| b | z |
| C | F |
| 不適用 | 不適用 |
library(tidyverse)
var1 = c("a","b","c","d")
var2 = c("e","z","f","h")
ref = tibble(var1,var2);ref
sym1 = c("e","b","b","f","n","n","k")
sym2 = c("a","f","z","c","s","k","l")
univ = tibble(sym1,sym2);univ
如何使用 dplyr 在 R 中執行此操作?
uj5u.com熱心網友回復:
在基礎 R 中:
s <- apply(univ, 1, \(x) paste(sort(x), collapse = " "))
r <- paste(ref$var1, ref$var2)
univ[match(r, s), ]
sym1 sym2
1 e a
2 b z
3 f c
4 NA NA
在一個對 tidyverse 友好的管道中:
library(stringr)
library(dplyr)
univ %>%
rowwise() %>%
mutate(s = str_c(sort(c_across(everything())), collapse = "")) %>%
pull(s) %>%
match(str_c(ref$var1, ref$var2), .) %>%
univ[., ]
uj5u.com熱心網友回復:
基礎 R 單線
ref[is.na(do.call(match, lapply(list(unname(ref), unname(univ)), apply, 1, sort, simplify = FALSE))), ] <- NA
給
> ref
# A tibble: 4 × 2
var1 var2
<chr> <chr>
1 a e
2 b z
3 c f
4 NA NA
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/522777.html
標籤:r数据框dplyr
上一篇:在R中同時過濾多個條件
