【发布时间】:2021-08-05 13:59:30
【问题描述】:
我有这个data.frame
data <- structure(list(pos = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10), c = c("AUSTOP",
"ATIP;AITUO", "BERTUI", "BHTREAK;PAERJR;KIEYTU", "FRTEU3", "IRTUFH",
"HAZEB", "ERTUJG;JIRTUE;HERTYE", "DAIER1", "ZERV")),
class = "data.frame", row.names = c(NA,
-10L))
pos c
1 1 AUSTOP
2 2 ATIP;AITUO
3 3 BERTUI
4 4 BHTREAK;PAERJR;KIEYTU
5 5 FRTEU3
6 6 IRTUFH
7 7 HAZEB
8 8 ERTUJG;JIRTUE;HERTYE
9 9 DAIER1
10 10 ZERV
还有这两个向量:
xa <- c("AUSTOP", "HTURIE", "IRTUFH", "JEURTU", "AITUO", "ERTUJG",
"HERTYE", "DAIER", "ZERV1", "BERTUI")
xb <- c("ERTUJG", "TYUINJ", "HERTYE", "AUSTOP", "ERTBGT", "POKNFR")
我想为每一行创建另一个变量 new2,其中所有字符链都存在于 c 变量和 xa AND xb 向量中,如下所示:
pos c new1 new2
1 1 AUSTOP AUSTOP AUSTOP
2 2 ATIP;AITUO AITUO <NA>
3 3 BERTUI BERTUI <NA>
4 4 BHTREAK;PAERJR;KIEYTU <NA> <NA>
5 5 FRTEU3 <NA> <NA>
6 6 IRTUFH IRTUFH <NA>
7 7 HAZEB <NA> <NA>
8 8 ERTUJG;JIRTUE;HERTYE ERTUJG;HERTYE ERTUJG
9 9 DAIER1 <NA> <NA>
10 10 ZERV <NA> <NA>
我问了一个类似的问题,只用一个向量(示例中的 xa)做同样的事情以获得 new1,但我不知道如何调整代码(见下文)以匹配两个向量。
library(dplyr)
library(stringr)
library(purrr)
data %>%
mutate(new = map_chr(str_extract_all(c, str_c("\\b(", str_c(xa,
collapse="|"), ")\\b")), str_c, collapse=";"))
如果 tidyverse 有解决方案,那就太好了。 感谢您的帮助。
【问题讨论】:
-
在您的示例中,您同时拥有
AUSTOP和AUTOSTOP。我认为其中一个应该更正。 -
您能否更具体地说明您是如何从一个步骤到另一个步骤的?我无法说出您希望向量之间的关联程度以及 new1 之间的关联程度,尤其是因为 xb 更短。此外,您可能会遇到名为
c的变量的问题(或者只是很难调试),因为这已经是您经常使用的函数