问题标签 [grepl]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
281 浏览

regex - R正则表达式重复忽略上限

我尝试制作正则表达式来帮助我过滤字符串,例如

其中 suffix 是长度为 2 到 5 个字符的任何字符串。所以我想接受字符串

但丢弃

我通过以下方式使用 grepl:

但它忽略了重复的上限(5)。所以它丢弃字符串 blah_blah_a、blah_aaa,但接受字符串 blah_blah_aaaaaaa。

我知道有一种方法可以在不使用正则表达式的情况下过滤字符串,但我想了解如何正确使用 grepl。

0 投票
1 回答
10854 浏览

r - 如果列中包含子字符串,如何检查它的每一行

假设我在数据框中有一列“名称” df

而且,我想检查列中的每一行是否name包含单词apple。我这样做的方式是使用grepl, grepl('apple',df$name),我希望它会返回'TRUE','TRUE','FALSE','FALSE','FALSE',但是,它返回了 5 'FALSE'

我在这里做错了什么吗,如果不是grep,我应该使用什么功能?

0 投票
1 回答
255 浏览

r - 在 R 中使用 grepl 和 ddply 和变换

我认为关于语法的快速问题。我有一个 df,如下所示。我想确定一个人第一次得到苹果、猕猴桃或橙子的时间。为此,我使用以下代码创建了三个名为“apple1”、“kiwi1”和“orange1”的新变量:

但是,我实际上想使用 grepl 来识别我的水果,但无法使代码正常工作。这是我尝试过的:

如果有人能指出我在这里出错的地方,那就太好了。谢谢!

样本 DF

0 投票
1 回答
383 浏览

r - 匹配具有不同顺序的 2 个单独数据帧中的 2 列,并返回另一个值

我有 2 个数据框,我希望匹配 2 列文本数据(我熟悉使用 match() 函数来匹配使用一列的数据框)。

数据帧 A 是数据帧 B 的子集,但 2 列中的数据可能以相反的顺序出现,即 Dog-Cat 可能是 Cat-Dog。数据框 B 还包含一列额外的数值。我想将数据框 A 与数据框 B 匹配,然后返回数字列。在所有情况下都会有一场比赛。

数据框 A

数据框 B

匹配的数据应为

我尝试使用match()并尝试连接测试字符串。也不确定是否grepl()会在这里有所帮助。

0 投票
2 回答
293 浏览

r - 复制数据框的观察结果,但也替换 R 中的特定变量值

我正在寻找一些关于一些数据重组的建议。我正在使用 Google 表单收集一些数据,这些数据以 csv 文件的形式下载,如下所示:

数据有两个变量(alpha 和 beta),每个变量都列出了编号。对于我的大部分数据,每个变量中只有一个数字。然而,对于某些观察,可能有两个、三个甚至多达十个数字。这是因为这些是使用谷歌表单中的“复选框”选项收集的回复,该选项允许对一个调查问题进行多个回答。此外,对于一些潜在的解决方案,谷歌表单在多个答案中的每一个之前返回前导空格可能很重要。

在我的真实数据中,这仅发生在所有观察中的很小一部分,以上是一个更简洁的例子。数据集中还有其他几个变量。在这里,我只包括一个包含因素的称为“选项”的选项。

我需要做的是复制所有在“alpha”或“beta”变量中包含多个数字的观察结果。重复行数应等于 alpha 或 beta 变量中存在的数字数。然后,我需要用每个数字独立替换“alpha”或“beta”变量中的数字序列。这将导致如下所示:

这是重现上述原始示例数据的数据。我将数据框称为“演示”:

好的。所以我想我已经编写了一些代码,它们以一种非常冗长的方式确实导致了我正在寻找的新数据框。但是,感觉必须有一种更优雅、更好的方法来做到这一点。

基本上,我首先处理“alpha”变量。我首先根据变量中是否存在逗号来对观察进行子集化。对于包含逗号的观察,然后我使用 strsplit 来分隔数字。然后我计算每个观察值存在多少个数字,并以此复制每个观察值。然后,我将拆分的数字融合到一个数据框中,其中所有数字都在一个名为“value”的变量中。然后,我只需用融化的“值”变量中的数据替换“阿尔法”变量。然后我用不包含逗号的数据将其重新绑定。然后我使用这个df并处理'beta'变量......

这是我的解决方案(它似乎有效?):

除了可能效率不高之外,我不确定这是否适用于所有条件。特别是如果同一观察的 'alpha' 和 'beta' 变量中都存在多个数字。我已经用几个例子对其进行了测试,看起来还可以,但我对它没有信心。

感谢您的任何考虑。

0 投票
2 回答
1514 浏览

r - 同一向量中两个元素之间的最小距离 (r)

我有一个与此类似的问题 - 2 个逻辑向量(取 2)的元素之间的快速最小距离(间隔), 但它有一些重要的区别。

假设我有一个向量:

我想做的是:

对于每个元素,仅计算它与每个不同类型的下一个元素之间的最小距离。如果对于任何元素,在前向方向上没有出现特定类型的元素,则应返回 0。返回的数据将如下所示:

所需的输出表-

第一列/var 只是指元素顺序。第二个 col/var 是该位置的元素。然后有四个 cols/vars - 每个都是出现在向量中的唯一元素。

这四个 cols/vars 中的每一个中的数字都是从该行的元素到仅在 FORWARD 方向上每种类型的下一个出现的元素的最小距离。如果输入“0”,则表示该元素不会出现在向量中该行的元素之后。

如何做到这一点?

我的第一个想法是尝试模仿上述问题的某些方面。为此,我使用 grepl 函数将向量转换为四个独立的逻辑向量,指示每个元素的存在/不存在。

然后我尝试了“Flodel”函数和 GG 使用 library(data.table) 提供的第二个函数。

例如,要计算从所有“As”到“D”的最小距离:

这两个选项都找到了所有 A 到 D 的最小距离。但是,它是在任何方向上,而不仅仅是 FORWARD 方向。GG 的 data.table 选项在表面上对我更有吸引力,因为它返回的数据显示了每个元素的位置(输出的 'y' 列),这可以很容易地打包成一个漂亮的汇总表(比如我想要的)上面的输出表)。

我试图找出在 data.table 中使用“roll”参数的替代方法,但我似乎没有解决这个问题。

感谢您的任何建议。

0 投票
1 回答
1270 浏览

r - 在R中的数据框列中查找字符串

所以如果我有以下

假设列表是一列字符串。我想知道如何在“猫”“狗”作为一对出现一次后返回它们可能出现更多次的行。我试过了:

我知道这适用于“|” 由于某种原因,它不能与“&”一起使用。让我知道是否有人可以提供帮助。谢谢!

0 投票
4 回答
3520 浏览

regex - 从数据框中的字符串中删除字符

我有一个数据框,其中“ID”列的值如下:1234567_GSM00298873 1238416_GSM90473673 98377829

换句话说,有些行有 7 个数字,后跟“_”,然后是字母和数字;其他行只有数字

我想删除字母前面的数字和下划线,而不影响只有数字的行。我试过了

但这只会删除下划线。所以我了解到 * 表示零或更多。是否有通配符和重复运算符,以便我可以告诉它找到“任何七次跟随-_”的模式?谢谢!

0 投票
3 回答
301 浏览

r - 需要帮助使用 R 处理来自谷歌表单的多个响应字符串

我正在尝试在 R 中处理来自 Google 表单的结果,并且在处理字符串数据时遇到了困难。

这个问题可以在这里看到:

在此处输入图像描述

Google 在单个列中返回结果,每个响应用逗号分隔。

他们最终看起来像

我使用 grepl 为三个预先选择的响应创建逻辑列和 data.frame。

这很好用。但是,我还需要拔出“其他”。我正在使用

但刚刚意识到,如果一个响应既有预选响应又有开放式响应,则使用此方法会丢失。它可以很好地给我“Bla”回复,但只有那些完全是“其他”的回复。

换句话说,这会产生

但我想要的是

这是我第一次在 SO 上发帖,而且我显然是 R 的新手,所以请原谅我提出问题的方式有任何错误。如果我的措辞不好,我很抱歉。我有大约 20 个其他问题有同样的问题,所以我需要一个灵活的解决方案。

谢谢你的帮助。

0 投票
3 回答
76527 浏览

r - grepl 在 R 中查找与任何字符串列表的匹配项

是否可以在引用值列表时使用grepl参数,也许使用 %in% 运算符?我想获取下面的数据,如果动物名称中有“狗”或“猫”,我想返回一个特定的值,比如“keep”;如果它没有“狗”或“猫”,我想返回“丢弃”。

现在,如果我只是通过严格匹配值来做到这一点,比如“猫”和“狗”,我可以使用以下方法:

但使用 grep 或 grepl 仅指列表中的第一个参数:

返回

注意,我在搜索中看到了这个线程,但这似乎不起作用: grep using a character vector with multiple patterns