gpt4 book ai didi

r - 匹配多个字符串并加入

转载 作者:行者123 更新时间:2023-12-02 06:47:28 24 4
gpt4 key购买 nike

我在匹配 r 中的多个字符串时遇到困难。我拥有的数据框如下所示:

      Var1                                      Var2
1 SJDJWK P04TGI7F3;P030Y7Y11;PE35RV747;Q2UKLVVX4
2 ODJSMDK Q2UKLVVX4;PWER00711;PE35RV747;Q2UKLVVX4
3 JDKSAKDJ PE35RV747;P0F071G1G

我想匹配以“;”分隔的字符串使用以下数据框中的值:

      Var_x    Var_y
1 P04TGI7F3 good
2 P030Y7Y11 normal
3 PE35RV747 bad
4 Q2UKLVVX4 normal

因此生成的数据框如下所示:

      Var1                                      Var2                    Var3
1 SJDJWK P04TGI7F3;P030Y7Y11;PE35RV747;Q2UKLVVX4 good;normal;bad;normal
2 ODJSMDK Q2UKLVVX4;PWER00711;PE35RV747;Q2UKLVVX4 normal;bad;normal
3 JDKSAKDJ PE35RV747;P0F071G1G bad

到目前为止,我尝试使用模糊连接来做到这一点:

fuzzy_left_join(Data1, Data2, by = c("Var2"="Var_x"), match_fun = str_detect)

这样可以完成工作,但会占用大量内存(我的数据集非常大,R 停止工作)。我试图用 for 循环来做到这一点,但我不知道该怎么做。有谁知道吗?

最佳答案

这是来自 tidyverse 的想法。我们分开行,在第二个数据帧上合并,然后再次基于 Var1 进行连接,

library(tidyverse)

df1 %>%
separate_rows(Var2) %>%
left_join(df2, by = c('Var2' = 'Var_x')) %>%
group_by(Var1) %>%
summarise_all(funs(paste(., collapse = ';')))

这给出了,

# A tibble: 3 x 3
Var1 Var2 Var_y
<fct> <chr> <chr>
1 JDKSAKDJ PE35RV747;P0F071G1G bad;NA
2 ODJSMDK Q2UKLVVX4;PWER00711;PE35RV747;Q2UKLVVX4 normal;NA;bad;normal
3 SJDJWK P04TGI7F3;P030Y7Y11;PE35RV747;Q2UKLVVX4 good;normal;bad;normal

如果您不想包含 NA,我们可以在加入之前省略(如@akrun 提到的),即

df1 %>% 
separate_rows(Var2) %>%
filter(Var2 %in% df2$Var_x) %>%
left_join(df2, by = c('Var2' = 'Var_x')) %>%
group_by(Var1) %>%
summarise_all(funs(paste(., collapse = ';')))

这给出了,

# A tibble: 3 x 3
Var1 Var2 Var_y
<fct> <chr> <chr>
1 JDKSAKDJ PE35RV747 bad
2 ODJSMDK Q2UKLVVX4;PE35RV747;Q2UKLVVX4 normal;bad;normal
3 SJDJWK P04TGI7F3;P030Y7Y11;PE35RV747;Q2UKLVVX4 good;normal;bad;normal

关于r - 匹配多个字符串并加入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54456031/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com