【问题标题】:Is there another alternative to grep?grep 还有另一种选择吗?
【发布时间】:2022-08-21 12:36:11
【问题描述】:

我有两个data frames。其中一个包含许多问题作为文本我使用grep() 函数将这些数字与我的其他dataframe 列的名称相匹配。

问题是我的code 的一部分不起作用,因为我的function grep() 没有做到这一点。

基本上我的两个dataframes如下

DF1:

Question Group
11 Redmeat
100 Chicken
56 Vegetables
210 Dairy

DF 2(值无关紧要,只有列名):

1.Question 2.Question ... 101.Question ... 250.Question
Yes No ... ... ... ...
Yes Yes ... ... ... ...
No Yes ... ... ... ...
No Yes ... ... ... ...

我使用以下代码:

i <- n ## I change n according to the row of DF1 that I want
grep(DF1$Question[i], colnames(DF2), fixed = T)

如果我做:

i <- 2  ## (Question number 100)
grep(DF1$Question[i], colnames(DF2), fixed = T)

我的代码返回 100,这是正确的,因为它是对应于 \"100.Question\" 的列

但如果我这样做:

i <- 1  ## (Question number 1)
grep(DF1$Question[i], colnames(DF2), fixed = T)

我的代码返回 1, 11, 21 ... 101 ... 201

如果我这样做也一样:

i <- 3  ## (Question number 56)
grep(DF1$Question[i], colnames(DF2), fixed = T)

它返回 56, 156

我只想要完全相同的数字。即使我使用参数fixed = TRUE 它也不起作用。

有解决方案或替代方案吗?

    标签: r dataframe match


    【解决方案1】:

    两个选项:1) 在 grep 模式中包含 .grep(paste0("^", DF1$Question[i], "\\."), colnames(DF2)),或 2) 粘贴完整的 ".Question" 并使用完全匹配而不使用任何 grep:paste0(DF1$Question, ".Question")。这可能比正则表达式更有效。由于您的代码到处都有这些is,我假设您正在使用循环。 grep 和 paste 是矢量化的,因此如果您提供更多上下文,我们可能能够帮助您完全避免循环。

    【讨论】:

    • 事实上,我使用了一个循环,但创建了另一个数据框,这个 grep() 函数问题使我的循环崩溃。问题是我不能包括全名,因为它们是很长的问题,我的例子非常简化。尽管如此,第一个选项grep(paste0("^", DF1$Question[i], "\\."), colnames(DF2)) 似乎有效!所以谢谢!
    【解决方案2】:

    如何在 pattern 中指定您从一开始就想要的 ^ 并且您希望它后面跟着 .Q

    i=3
    grep(paste0("^",DF1$Question[i],".Q"), colnames(DF2))
    

    输出:

    [1] 56
    

    【讨论】:

      【解决方案3】:

      您需要grep 以获得唯一值,因此您应该grep 字符串^ 的开头,以及您的号码和点.。在这种情况下,您不能使用 fixed = T 参数,因为您正在使用正则表达式进行匹配。

      grep(paste0("^", DF1$Question[i], "\\."), colnames(DF2))
      

      【讨论】:

        猜你喜欢
        • 2020-12-18
        • 1970-01-01
        • 2012-05-10
        • 1970-01-01
        • 2022-12-24
        • 2013-04-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多