regex - 从 data.frame 中选择以 R 中的特定字符串结尾的行

标签 regex string r character dataframe

我正在使用 R,并且有一个包含近 2,000 个条目的 data.frame,如下所示:

> head(PVs,15)
     LogFreq   Word PhonCV  FreqDev
1593     140    was    CVC 5.480774
482      139    had    CVC 5.438114
1681     138    zou   CVVC 5.395454
1662     137    zei    CVV 5.352794
1619     136   werd   CVCC 5.310134
1592     135  waren CVV-CV 5.267474
620      134    kon    CVC 5.224814
646      133   kwam   CCVC 5.182154
483      132 hadden CVC-CV 5.139494
436      131   ging    CVC 5.096834
734      130  moest  CVVCC 5.054174
1171     129  stond  CCVCC 5.011514
1654     128    zag    CVC 4.968854
1620     127 werden CVC-CV 4.926194
1683     126 zouden CVV-CV 4.883534

我想要做的是创建一个等于PV的新data.frame,除了所有条目作为“Word”列的成员的字符串不以“te”或“德”被删除。即所有不以“de”或“te”结尾的单词都应从 data.frame 中删除。

我知道如何使用逻辑运算符有选择地从 data.frames 中删除条目,但这些在您设置数字条件时有效。我认为要做到这一点,我需要使用正则表达式,但遗憾的是 R 是我“知道”的唯一编程语言,所以我远不知道这里使用什么类型的代码。

感谢您的帮助。 提前致谢。

最佳答案

方法一

您可以将 grepl 与适当的正则表达式一起使用。考虑以下因素:

x <- c("blank","wade","waste","rubbish","dedekind","bated")
grepl("^.+(de|te)$",x)
[1] FALSE  TRUE  TRUE FALSE FALSE FALSE

正则表达式表示以任意次数开始 (^) (.+),然后查找 de 或 te ((de|te )) 然后结束 ($)。

所以对于你的 data.frame 尝试,

subset(PVs,grepl("^.+(de|te)$",Word))

方法2

要避免使用 regexp 方法,您可以使用 substr 方法。

# substr the last two characters and test
substr(x,nchar(x)-1,nchar(x)) %in% c("de","te")
[1] FALSE  TRUE  TRUE FALSE FALSE FALSE

所以尝试一下:

subset(PVs,substr(Word,nchar(Word)-1,nchar(Word)) %in% c("de","te"))

关于regex - 从 data.frame 中选择以 R 中的特定字符串结尾的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13012275/

相关文章:

objective-c - 在 Objective-C 中的最后一项之前创建一个逗号分隔的列表,其中包含 "and",特别是

r - 在 Shiny 中无 react 地使用响应式(Reactive)表达式?

java ;字符串替换(使用正则表达式)?

正则表达式一个符号在整个字符串中恰好出现一次

java - 用java从字符串矩阵中替换字符串中的某个单词

javascript - 悬停散点图时显示变量名称

mysql - R 使用enable-cleartext-plugin选项连接到MySQL服务器

regex - awk 仅使用正则表达式编辑 1 列

regex - 使用 Rust 的正则表达式箱时如何转义转义的正则表达式字符?

javascript - 在javascript中将字符串中单词的首字母更改为大写