删除R开头和结尾均包含句点的行

时间:2019-07-15 17:46:31

标签: r regex character match rows

我在R中有一个数据集,其中包含一百多个字符。

我正在尝试删除所有以“。”开头和结尾的行。时期字符。  我将首先将这些行设置为空白,然后通过将它们写入.csv文件来删除它们。问题出在第一部分,我如何首先将它们设置为空白?

下面是我尝试过的gsub命令,但对任何行都不做任何操作。

#remove all periods followed by a space
data$text<- gsub('^([.][.])$', '', data$text)
data$text <- gsub('[.]*$',"",data$text) # with over a hundred rows

Value   text
1     male occupied
2     male occupied
3     female occupied
4     . . . .
5     male occupied
6     . . .
7     female occupied
8     . .

我的预期输出:

Value   text
1     male occupied
2     male occupied
3     female occupied
5     male occupied
7     female occupied

如何在R中做到这一点? gsub可以走吗?

1 个答案:

答案 0 :(得分:1)

gsub是全局替换,用于从字符串中删除/替换子字符串。根据{{​​1}}

  

两个* sub函数的区别仅在于,sub仅替换模式的第一个匹配项,而gsub替换所有的匹配项。

这里,目的是在向量中找到模式的位置,并删除向量或列中的那些元素(以从data.frame中删除行)。 ?gsub文档说

  

grep,grepl,regexpr,gregexpr和regexec在字符向量的每个元素内搜索与参数模式的匹配项:它们在结果的格式和详细程度上有所不同。

因此,我们得到数字索引(grep)或逻辑向量(grep)的输出,并将ddata子集化

grepl

在这里,我们匹配一个df1[!grepl("^\\.|\\.$", df1$text),] .是任何字符的元字符-为了获得字面意思,可以转义(.)或将其放在方括号({ {1}}或使用\\-这里有[.],因此我们不能在开始(fixed = TRUE)或结束(|)处使用该选项以^返回字符串的逻辑向量,取反($),以使TRUE-> FALSE和FALSE-> TRUE并使用它来过滤行。