gpt4 book ai didi

R在多列中完全匹配和部分匹配

转载 作者:行者123 更新时间:2023-12-02 02:25:23 25 4
gpt4 key购买 nike

R 专家。

我有两个数据框。

数据框一:

df1 <- c("xx", "bb", "zz")

数据框二:

df2 <- data.frame(A=c("xx", "be", "zz", "jj"), B=c("xyx, uu, zz", "uu, zbbz, zbz, ccc", "cc, zzx", "ddd"), C=c("bbbb", "yyy", "xxq", "ooo"), D=c("ooo", "yyy", "ccc", "zoz"))

因此,df2如下:

   A                  B    C   D
1 xx xyx, uu, zz bbbb ooo
2 be uu, zbbz, zbz, ccc yyy yyy
3 zz cc, zzx xxq ccc
4 jj ddd ooo zoz

我想将 x 与 y 匹配以获得新的数据框。查看 Stackoverflow 的答案,我学会了如何进行一些精确匹配。不过在目前的情况下,我想同时进行完全匹配和部分匹配。在我看来,“grep”可能会有所帮助,但我还不能让它为我的情况工作,请帮忙。

在 df1 中,我必须用三个术语来匹配“xx”、“bb”和“zz”。而不是在 df2 中搜索精确的 xx、bb、zz。我想查看是否可以在df2的A列和B列中找到这些术语,其中可能包含完全匹配和部分匹配。

例如,我会考虑

  1. xx匹配第1行(与A1完全匹配)

  2. bb 仅匹配第 2 行(部分与 B2) 匹配

  3. zz 匹配第 1 行和第 3 行(部分匹配 B1 和与A3完全匹配,部分匹配也有 B3),

  4. 作为 zz 匹配两个两个项目,我想排序一个在决赛中以完全匹配的第一名数据框,即首先显示的第 3 行,接下来显示第 1 行。

  5. 第 4 行df2 与中的任何内容都不匹配表,所以,它不会出现在最终的数据框中。

最后,我想通过将相应的 df2 添加到 df1 来获取数据框,如下所示:

  V1   A                  B    C   D
1 xx xx xyx, uu, zz bbbb ooo
2 bb be uu, zbbz, zbz, ccc yyy yyy
3 zz zz cc, zzx xxq ccc
4 zz xx xyx, uu, zz bbbb ooo

在这种情况下可以使用 grep 或 sort 吗?请指导更聪明的方法。谢谢。

最佳答案

这应该让你到达那里:

dfrPerVal<-lapply(df1, function(dfrPartFor){
whereFoundA<-grep(dfrPartFor, df2$A, fixed=TRUE)
whereFoundB<-grep(dfrPartFor, df2$B, fixed=TRUE)
retval<-cbind(1=dfrPartFor, df[union(whereFoundA, whereFoundB),]
xmatch<-which((retval$A==dfrPartFor) | (retval$B==dfrPartFor))
if(length(xmatch) > 0)
{
retval<-rbind(retval[xmatch, ], retval[-xmatch, ])
}
return(retval)
})
finalResult<-do.call(rbind, dfrPerVal)

毫无疑问,有更好的解决方案......

关于R在多列中完全匹配和部分匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6171852/

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